Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
This file is part of the Flocq formalization of floating-point arithmetic in Coq: http://flocq.gforge.inria.fr/
Copyright (C) 2010-2018 Sylvie Boldo
Copyright (C) 2010-2018 Guillaume Melquiond
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the COPYING file for more details.

IEEE-754 arithmetic

Require Import Core Digits Round Bracket Operations Div Sqrt Relative.
Require Import Psatz.

Section AnyRadix.

Inductive full_float :=
  | F754_zero (s : bool)
  | F754_infinity (s : bool)
  | F754_nan (s : bool) (m : positive)
  | F754_finite (s : bool) (m : positive) (e : Z).

Definition FF2R beta x :=
  match x with
  | F754_finite s m e => F2R (Float beta (cond_Zopp s (Zpos m)) e)
  | _ => 0%R
  end.

End AnyRadix.

Section Binary.

Arguments exist {A} {P}.
prec is the number of bits of the mantissa including the implicit one; emax is the exponent of the infinities. For instance, binary32 is defined by prec = 24 and emax = 128.
Variable prec emax : Z.
Context (prec_gt_0_ : Prec_gt_0 prec).
Hypothesis Hmax : (prec < emax)%Z.

Let emin := (3 - emax - prec)%Z.
Let fexp := FLT_exp emin prec.
Instance fexp_correct : Valid_exp fexp := FLT_exp_valid emin prec.
Instance fexp_monotone : Monotone_exp fexp := FLT_exp_monotone emin prec.

Definition canonical_mantissa m e :=
  Zeq_bool (fexp (Zpos (digits2_pos m) + e)) e.

Definition bounded m e :=
  andb (canonical_mantissa m e) (Zle_bool e (emax - prec)).

Definition nan_pl pl :=
  Zlt_bool (Zpos (digits2_pos pl)) prec.

Definition valid_binary x :=
  match x with
  | F754_finite _ m e => bounded m e
  | F754_nan _ pl => nan_pl pl
  | _ => true
  end.
Basic type used for representing binary FP numbers. Note that there is exactly one such object per FP datum.
Inductive binary_float :=
  | B754_zero (s : bool)
  | B754_infinity (s : bool)
  | B754_nan (s : bool) (pl : positive) :
    nan_pl pl = true -> binary_float
  | B754_finite (s : bool) (m : positive) (e : Z) :
    bounded m e = true -> binary_float.

Definition FF2B x :=
  match x as x return valid_binary x = true -> binary_float with
  | F754_finite s m e => B754_finite s m e
  | F754_infinity s => fun _ => B754_infinity s
  | F754_zero s => fun _ => B754_zero s
  | F754_nan b pl => fun H => B754_nan b pl H
  end.

Definition B2FF x :=
  match x with
  | B754_finite s m e _ => F754_finite s m e
  | B754_infinity s => F754_infinity s
  | B754_zero s => F754_zero s
  | B754_nan b pl _ => F754_nan b pl
  end.

Definition B2R f :=
  match f with
  | B754_finite s m e _ => F2R (Float radix2 (cond_Zopp s (Zpos m)) e)
  | _ => 0%R
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, FF2R radix2 (B2FF x) = B2R x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, FF2R radix2 (B2FF x) = B2R x
now intros [sx|sx|sx plx Hplx|sx mx ex Hx]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), B2FF (FF2B x Hx) = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), B2FF (FF2B x Hx) = x
now intros [sx|sx|sx plx|sx mx ex] Hx. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, valid_binary (B2FF x) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, valid_binary (B2FF x) = true
now intros [sx|sx|sx plx Hplx|sx mx ex Hx]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : binary_float) (H : valid_binary (B2FF x) = true), FF2B (B2FF x) H = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : binary_float) (H : valid_binary (B2FF x) = true), FF2B (B2FF x) H = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
H:valid_binary (B2FF (B754_nan sx plx Hplx)) = true

FF2B (B2FF (B754_nan sx plx Hplx)) H = B754_nan sx plx Hplx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:valid_binary (B2FF (B754_finite sx mx ex Hx)) = true
FF2B (B2FF (B754_finite sx mx ex Hx)) H = B754_finite sx mx ex Hx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:valid_binary (B2FF (B754_finite sx mx ex Hx)) = true

FF2B (B2FF (B754_finite sx mx ex Hx)) H = B754_finite sx mx ex Hx
apply f_equal, eqbool_irrelevance. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, FF2B (B2FF x) (valid_binary_B2FF x) = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, FF2B (B2FF x) (valid_binary_B2FF x) = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float

FF2B (B2FF x) (valid_binary_B2FF x) = x
apply FF2B_B2FF. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), B2R (FF2B x Hx) = FF2R radix2 x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), B2R (FF2B x Hx) = FF2R radix2 x
now intros [sx|sx|sx plx|sx mx ex] Hx. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (T : Type) (fz fi : bool -> T) (fn : bool -> positive -> T) (ff : bool -> positive -> Z -> T) (x : full_float) (Hx : valid_binary x = true), match FF2B x Hx with | B754_zero sx => fz sx | B754_infinity sx => fi sx | B754_nan b p _ => fn b p | B754_finite sx mx ex _ => ff sx mx ex end = match x with | F754_zero sx => fz sx | F754_infinity sx => fi sx | F754_nan b p => fn b p | F754_finite sx mx ex => ff sx mx ex end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (T : Type) (fz fi : bool -> T) (fn : bool -> positive -> T) (ff : bool -> positive -> Z -> T) (x : full_float) (Hx : valid_binary x = true), match FF2B x Hx with | B754_zero sx => fz sx | B754_infinity sx => fi sx | B754_nan b p _ => fn b p | B754_finite sx mx ex _ => ff sx mx ex end = match x with | F754_zero sx => fz sx | F754_infinity sx => fi sx | F754_nan b p => fn b p | F754_finite sx mx ex => ff sx mx ex end
now intros T fz fi fn ff [sx|sx|sx plx|sx mx ex] Hx. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (sx : bool) (mx : positive) (ex : Z), canonical_mantissa mx ex = true -> canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (sx : bool) (mx : positive) (ex : Z), canonical_mantissa mx ex = true -> canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
H:canonical_mantissa mx ex = true

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
H:canonical_mantissa mx ex = true
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = Fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = ex
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

mag radix2 (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(Zdigits radix2 (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) + ex)%Z = (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
SpecFloatCopy.cond_Zopp sx (Z.pos mx) <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(Zdigits radix2 (Z.abs (SpecFloatCopy.cond_Zopp sx (Z.pos mx))) + ex)%Z = (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
SpecFloatCopy.cond_Zopp sx (Z.pos mx) <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(Zdigits radix2 (Z.abs (SpecFloatCopy.cond_Zopp sx (Z.pos mx))) + ex)%Z = (Zdigits radix2 (Z.pos mx) + ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
SpecFloatCopy.cond_Zopp sx (Z.pos mx) <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

SpecFloatCopy.cond_Zopp sx (Z.pos mx) <> 0%Z
now case sx. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, generic_format radix2 fexp (B2R x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, generic_format radix2 fexp (B2R x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

generic_format radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

canonical_mantissa mx ex = true
now destruct (andb_prop _ _ Hx) as (H, _). Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, FLT_format radix2 emin prec (B2R x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, FLT_format radix2 emin prec (B2R x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float

FLT_format radix2 emin prec (B2R x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float

generic_format radix2 (FLT_exp emin prec) (B2R x)
apply generic_format_B2R. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, B2FF x = B2FF y -> x = y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, B2FF x = B2FF y -> x = y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx, sy:bool

B2FF (B754_zero sx) = B2FF (B754_zero sy) -> B754_zero sx = B754_zero sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx, sy:bool
B2FF (B754_infinity sx) = B2FF (B754_infinity sy) -> B754_infinity sx = B754_infinity sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true
B2FF (B754_nan sx plx Hplx) = B2FF (B754_nan sy ply Hply) -> B754_nan sx plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx, sy:bool
H:B2FF (B754_zero sx) = B2FF (B754_zero sy)

B754_zero sx = B754_zero sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx, sy:bool
B2FF (B754_infinity sx) = B2FF (B754_infinity sy) -> B754_infinity sx = B754_infinity sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true
B2FF (B754_nan sx plx Hplx) = B2FF (B754_nan sy ply Hply) -> B754_nan sx plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx, sy:bool

B2FF (B754_infinity sx) = B2FF (B754_infinity sy) -> B754_infinity sx = B754_infinity sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true
B2FF (B754_nan sx plx Hplx) = B2FF (B754_nan sy ply Hply) -> B754_nan sx plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx, sy:bool
H:B2FF (B754_infinity sx) = B2FF (B754_infinity sy)

B754_infinity sx = B754_infinity sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true
B2FF (B754_nan sx plx Hplx) = B2FF (B754_nan sy ply Hply) -> B754_nan sx plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true

B2FF (B754_nan sx plx Hplx) = B2FF (B754_nan sy ply Hply) -> B754_nan sx plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true
H:B2FF (B754_nan sx plx Hplx) = B2FF (B754_nan sy ply Hply)

B754_nan sx plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true
H:B2FF (B754_nan sx plx Hplx) = B2FF (B754_nan sy ply Hply)
H1:sx = sy
H2:plx = ply

B754_nan sy plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
Hplx:nan_pl plx = true
sy:bool
ply:positive
Hply:nan_pl ply = true
H1:sx = sy
H2:plx = ply

B754_nan sy plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
sy:bool
ply:positive
Hply:nan_pl ply = true
H1:sx = sy
H2:plx = ply

forall Hplx : nan_pl plx = true, B754_nan sy plx Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
sy:bool
ply:positive
Hply:nan_pl ply = true
H1:sx = sy
H2:plx = ply

forall Hplx : nan_pl ply = true, B754_nan sy ply Hplx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
plx:positive
sy:bool
ply:positive
Hply:nan_pl ply = true
H1:sx = sy
H2:plx = ply
Hx:nan_pl ply = true

B754_nan sy ply Hx = B754_nan sy ply Hply
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H:B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy)

B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H:B2FF (B754_finite sx mx ex Hx) = B2FF (B754_finite sy my ey Hy)
H1:sx = sy
H2:mx = my
H3:ex = ey

B754_finite sy mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:sx = sy
H2:mx = my
H3:ex = ey

B754_finite sy mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:sx = sy
H2:mx = my
H3:ex = ey

forall Hx : bounded mx ex = true, B754_finite sy mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:sx = sy
H2:mx = my
H3:ex = ey

forall Hx : bounded my ey = true, B754_finite sy my ey Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:sx = sy
H2:mx = my
H3:ex = ey
Hx:bounded my ey = true

B754_finite sy my ey Hx = B754_finite sy my ey Hy
apply f_equal, eqbool_irrelevance. Qed. Definition is_finite_strict f := match f with | B754_finite _ _ _ _ => true | _ => false end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, is_finite_strict x = true -> is_finite_strict y = true -> B2R x = B2R y -> x = y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, is_finite_strict x = true -> is_finite_strict y = true -> B2R x = B2R y -> x = y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

is_finite_strict (B754_finite sx mx ex Hx) = true -> is_finite_strict (B754_finite sy my ey Hy) = true -> B2R (B754_finite sx mx ex Hx) = B2R (B754_finite sy my ey Hy) -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

true = true -> true = true -> F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} -> B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}

B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}

sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} -> sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} -> sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |} -> False
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} < F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} < R0)%R
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
(R0 < F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

(R0 < F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} > F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} > R0)%R
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
(R0 > F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

(R0 > F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

mx = my /\ ex = ey
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

{| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} -> mx = my /\ ex = ey
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

{| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos mx); Fexp := ex |} = {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} -> mx = my /\ ex = ey
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

canonical_mantissa mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy

canonical_mantissa my ey = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey

B754_finite sx mx ex Hx = B754_finite sy my ey Hy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey

forall Hx : bounded mx ex = true, B754_finite sx mx ex Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey

forall Hx : bounded my ey = true, B754_finite sy my ey Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
Hx:bounded my ey = true

B754_finite sy my ey Hx = B754_finite sy my ey Hy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} = F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
Hs:sx = sy
H:mx = my /\ ex = ey
Hx:bounded my ey = true

Hx = Hy
apply eqbool_irrelevance. Qed. Definition Bsign x := match x with | B754_nan s _ _ => s | B754_zero s => s | B754_infinity s => s | B754_finite s _ _ _ => s end. Definition sign_FF x := match x with | F754_nan s _ => s | F754_zero s => s | F754_infinity s => s | F754_finite s _ _ => s end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (H : valid_binary x = true), Bsign (FF2B x H) = sign_FF x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (H : valid_binary x = true), Bsign (FF2B x H) = sign_FF x
now intros [sx|sx|sx plx|sx mx ex] H. Qed. Definition is_finite f := match f with | B754_finite _ _ _ _ => true | B754_zero _ => true | _ => false end. Definition is_finite_FF f := match f with | F754_finite _ _ _ => true | F754_zero _ => true | _ => false end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), is_finite (FF2B x Hx) = is_finite_FF x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), is_finite (FF2B x Hx) = is_finite_FF x
now intros [| | |]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, is_finite_FF (B2FF x) = is_finite x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, is_finite_FF (B2FF x) = is_finite x
now intros [| |? []|]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, is_finite x = true -> is_finite y = true -> B2R x = B2R y -> Bsign x = Bsign y -> x = y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, is_finite x = true -> is_finite y = true -> B2R x = B2R y -> Bsign x = Bsign y -> x = y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x, y:binary_float
H:is_finite x = true
H0:is_finite y = true
H1:B2R x = B2R y
H2:Bsign x = Bsign y

x = y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
H:is_finite (B754_zero s) = true
H0:is_finite (B754_zero s0) = true
H1:B2R (B754_zero s) = B2R (B754_zero s0)
H2:Bsign (B754_zero s) = Bsign (B754_zero s0)

B754_zero s = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:B2R (B754_zero s) = B2R (B754_finite s0 m e e0)
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)
B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:B2R (B754_finite s m e e0) = B2R (B754_zero s0)
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)
B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
H:is_finite (B754_zero s) = true
H0:is_finite (B754_zero s0) = true
H1:B2R (B754_zero s) = B2R (B754_zero s0)
H2:Bsign (B754_zero s) = Bsign (B754_zero s0)

B754_zero s = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
H:is_finite (B754_zero s) = true
H0:is_finite (B754_zero s0) = true
H1:B2R (B754_zero s) = B2R (B754_zero s0)
H2:s = s0

B754_zero s = B754_zero s0
congruence.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:B2R (B754_zero s) = B2R (B754_finite s0 m e e0)
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:B2R (B754_finite s0 m e e0) = B2R (B754_zero s)
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m); Fexp := e |}) = 0%R \/ bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)
B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:Fnum {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m); Fexp := e |} = 0%Z
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)
B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)
H3:(0 < bpow radix2 e)%R

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)
H3:(0 < 0)%R

B754_zero s = B754_finite s0 m e e0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
H:is_finite (B754_zero s) = true
H0:is_finite (B754_finite s0 m e e0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_zero s) = Bsign (B754_finite s0 m e e0)
H3:False

B754_zero s = B754_finite s0 m e e0
destruct H3.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:B2R (B754_finite s m e e0) = B2R (B754_zero s0)
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) = 0%R \/ bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)
B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:Fnum {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = 0%Z
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)
B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)
H3:(0 < bpow radix2 e)%R

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)
H3:(0 < 0)%R

B754_finite s m e e0 = B754_zero s0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
H:is_finite (B754_finite s m e e0) = true
H0:is_finite (B754_zero s0) = true
H1:bpow radix2 e = 0%R
H2:Bsign (B754_finite s m e e0) = Bsign (B754_zero s0)
H3:False

B754_finite s m e e0 = B754_zero s0
destruct H3. Qed. Definition is_nan f := match f with | B754_nan _ _ _ => true | _ => false end. Definition is_nan_FF f := match f with | F754_nan _ _ => true | _ => false end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), is_nan (FF2B x Hx) = is_nan_FF x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : full_float) (Hx : valid_binary x = true), is_nan (FF2B x Hx) = is_nan_FF x
now intros [| | |]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, is_nan_FF (B2FF x) = is_nan x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, is_nan_FF (B2FF x) = is_nan x
now intros [| |? []|]. Qed. Definition get_nan_pl (x : binary_float) : positive := match x with B754_nan _ pl _ => pl | _ => xH end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:{x0 : binary_float | is_nan x0 = true}

binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:{x0 : binary_float | is_nan x0 = true}

binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:{x0 : binary_float | is_nan x0 = true}

nan_pl (get_nan_pl (proj1_sig x)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float
H:is_nan x = true

nan_pl (get_nan_pl (proj1_sig (exist x H))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float
H:is_nan x = true

nan_pl (get_nan_pl x) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float

is_nan x = true -> nan_pl (get_nan_pl x) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float
H:false = true -> nan_pl 1 = true

is_nan x = true -> nan_pl (get_nan_pl x) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
e:nan_pl pl = true
H:false = true -> nan_pl 1 = true

is_nan (B754_nan s pl e) = true -> nan_pl (get_nan_pl (B754_nan s pl e)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
e:nan_pl pl = true
H:false = true -> nan_pl 1 = true

nan_pl (get_nan_pl (B754_nan s pl e)) = true
apply e. Defined.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, build_nan x = proj1_sig x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, build_nan x = proj1_sig x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float
H:is_nan x = true

build_nan (exist x H) = proj1_sig (exist x H)
now destruct x. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, B2R (build_nan x) = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, B2R (build_nan x) = 0%R
easy. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, is_finite (build_nan x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, is_finite (build_nan x) = false
easy. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, is_nan (build_nan x) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : {x : binary_float | is_nan x = true}, is_nan (build_nan x) = true
easy. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float

binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:binary_float

binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool

binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:nan_pl pl = true
binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:bounded m e = true
binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool

binary_float
exact (B754_zero s).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool

binary_float
exact (B754_infinity s).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:nan_pl pl = true

binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:nan_pl pl = true

nan_pl pl = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:true = true

true = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:false = true
false = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:false = true

false = true
exact H.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:bounded m e = true

binary_float
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:bounded m e = true

bounded m e = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:true = true

true = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:false = true
false = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:false = true

false = true
exact H. Defined.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, erase x = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, erase x = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:nan_pl pl = true

B754_nan s pl ((if nan_pl pl as b return (b = true -> b = true) then fun _ : true = true => eq_refl else fun H0 : false = true => H0) H) = B754_nan s pl H
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:bounded m e = true
B754_finite s m e ((if bounded m e as b return (b = true -> b = true) then fun _ : true = true => eq_refl else fun H0 : false = true => H0) H) = B754_finite s m e H
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
pl:positive
H:nan_pl pl = true

B754_nan s pl ((if nan_pl pl as b return (b = true -> b = true) then fun _ : true = true => eq_refl else fun H0 : false = true => H0) H) = B754_nan s pl H
apply f_equal, eqbool_irrelevance.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:bounded m e = true

B754_finite s m e ((if bounded m e as b return (b = true -> b = true) then fun _ : true = true => eq_refl else fun H0 : false = true => H0) H) = B754_finite s m e H
apply f_equal, eqbool_irrelevance. Qed.
Opposite
Definition Bopp opp_nan x :=
  match x with
  | B754_nan _ _ _ => build_nan (opp_nan x)
  | B754_infinity sx => B754_infinity (negb sx)
  | B754_finite sx mx ex Hx => B754_finite (negb sx) mx ex Hx
  | B754_zero sx => B754_zero (negb sx)
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Bopp opp_nan (Bopp opp_nan x) = x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Bopp opp_nan (Bopp opp_nan x) = x
now intros opp_nan [sx|sx|sx plx|sx mx ex Hx] ; simpl ; try rewrite Bool.negb_involutive. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), B2R (Bopp opp_nan x) = (- B2R x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), B2R (Bopp opp_nan x) = (- B2R x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
opp_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

(- B2R (B754_finite sx mx ex Hx))%R = B2R (Bopp opp_nan (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
opp_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

(- F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})%R = F2R {| Fnum := SpecFloatCopy.cond_Zopp (negb sx) (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
opp_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

F2R (Fopp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (negb sx) (Z.pos mx); Fexp := ex |}
now case sx. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite (Bopp opp_nan x) = is_finite x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite (Bopp opp_nan x) = is_finite x
now intros opp_nan [| | |]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Bsign (Bopp opp_nan x) = negb (Bsign x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Bsign (Bopp opp_nan x) = negb (Bsign x)
now intros opp_nan [s|s|s pl H|s m e H]. Qed.
Absolute value
Definition Babs abs_nan (x : binary_float) : binary_float :=
  match x with
  | B754_nan _ _ _ => build_nan (abs_nan x)
  | 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.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), B2R (Babs abs_nan x) = Rabs (B2R x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), B2R (Babs abs_nan x) = Rabs (B2R x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
abs_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

Rabs (B2R (B754_finite sx mx ex Hx)) = B2R (Babs abs_nan (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
abs_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = F2R {| Fnum := Z.pos mx; Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
abs_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

F2R (Fabs {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = F2R {| Fnum := Z.pos mx; Fexp := ex |}
now destruct sx. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite (Babs abs_nan x) = is_finite x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite (Babs abs_nan x) = is_finite x
now intros abs_nan [| | |]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Bsign (Babs abs_nan x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Bsign (Babs abs_nan x) = false
now intros abs_nan [| | |]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Babs abs_nan (Babs abs_nan x) = Babs abs_nan x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Babs abs_nan (Babs abs_nan x) = Babs abs_nan x
now intros abs_nan [sx|sx|sx plx|sx mx ex Hx]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Babs abs_nan (Bopp opp_nan x) = Babs abs_nan x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (abs_nan opp_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_nan x = false -> Babs abs_nan (Bopp opp_nan x) = Babs abs_nan x
now intros abs_nan opp_nan [| | |]. Qed.
Comparison
Some c means ordered as per c; None means unordered.
Definition Bcompare (f1 f2 : binary_float) : option comparison :=
  match f1, f2 with
  | B754_nan _ _ _,_ | _,B754_nan _ _ _ => None
  | B754_infinity s1, B754_infinity s2 =>
    Some match s1, s2 with
    | true, true => Eq
    | false, false => Eq
    | true, false => Lt
    | false, true => Gt
    end
  | B754_infinity s, _ => Some (if s then Lt else Gt)
  | _, B754_infinity s => Some (if s then Gt else Lt)
  | B754_finite s _ _ _, B754_zero _ => Some (if s then Lt else Gt)
  | B754_zero _, B754_finite s _ _ _ => Some (if s then Gt else Lt)
  | B754_zero _, B754_zero _ => Some Eq
  | B754_finite s1 m1 e1 _, B754_finite s2 m2 e2 _ =>
    Some match s1, s2 with
    | true, false => Lt
    | false, true => Gt
    | false, false =>
      match Z.compare e1 e2 with
      | Lt => Lt
      | Gt => Gt
      | Eq => Pcompare m1 m2 Eq
      end
    | true, true =>
      match Z.compare e1 e2 with
      | Lt => Gt
      | Gt => Lt
      | Eq => CompOpp (Pcompare m1 m2 Eq)
      end
    end
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall f1 f2 : binary_float, is_finite f1 = true -> is_finite f2 = true -> Bcompare f1 f2 = Some (Rcompare (B2R f1) (B2R f2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall f1 f2 : binary_float, is_finite f1 = true -> is_finite f2 = true -> Bcompare f1 f2 = Some (Rcompare (B2R f1) (B2R f2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall f1 f2 : binary_float, is_finite f1 = true -> is_finite f2 = true -> Bcompare f1 f2 = Some (Rcompare (B2R f1) (B2R f2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
f1, f2:binary_float
H1:is_finite f1 = true
H2:is_finite f2 = true

match f1 with | B754_zero _ => match f2 with | B754_zero _ => Some Eq | B754_nan _ _ _ => None | B754_infinity s | B754_finite s _ _ _ => Some (if s then Gt else Lt) end | B754_infinity s => match f2 with | B754_infinity s0 => Some (if s then if s0 then Eq else Lt else if s0 then Gt else Eq) | B754_nan _ _ _ => None | _ => Some (if s then Lt else Gt) end | B754_nan _ _ _ => None | B754_finite s1 m1 e1 _ => match f2 with | B754_zero _ => Some (if s1 then Lt else Gt) | B754_infinity s => Some (if s then Gt else Lt) | B754_nan _ _ _ => None | B754_finite s2 m2 e2 _ => Some (if s1 then if s2 then match (e1 ?= e2)%Z with | Eq => CompOpp (Pos.compare_cont Eq m1 m2) | Lt => Gt | Gt => Lt end else Lt else if s2 then Gt else match (e1 ?= e2)%Z with | Eq => Pos.compare_cont Eq m1 m2 | Lt => Lt | Gt => Gt end) end end = Some (Rcompare (B2R f1) (B2R f2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool

Eq = Rcompare (B2R (B754_zero s)) (B2R (B754_zero s0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true
(if s0 then Gt else Lt) = Rcompare (B2R (B754_zero s)) (B2R (B754_finite s0 m e e0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
(if s then Lt else Gt) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_zero s0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s, s0:bool
m:positive
e:Z
e0:bounded m e = true

(if s0 then Gt else Lt) = Rcompare (B2R (B754_zero s)) (B2R (B754_finite s0 m e e0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
(if s then Lt else Gt) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_zero s0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true

(B2R (B754_finite true m e e0) < B2R (B754_zero s))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
(B2R (B754_zero s) < B2R (B754_finite false m e e0))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
(if s then Lt else Gt) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_zero s0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true

(B2R (B754_zero s) < B2R (B754_finite false m e e0))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
(if s then Lt else Gt) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_zero s0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool

(if s then Lt else Gt) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_zero s0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:positive
e:Z
e0:bounded m e = true
s0:bool

(B2R (B754_finite true m e e0) < B2R (B754_zero s0))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:positive
e:Z
e0:bounded m e = true
s0:bool
(B2R (B754_zero s0) < B2R (B754_finite false m e e0))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:positive
e:Z
e0:bounded m e = true
s0:bool

(B2R (B754_zero s0) < B2R (B754_finite false m e e0))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (B2R (B754_finite s m e e0)) (B2R (B754_finite s0 m0 e1 e2))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
e0:bounded m e = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |}
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
e2:bounded m0 e1 = true

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |}
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |}
H2:(e1 <=? emax - prec)%Z = true

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z

forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z

forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
m1, m2:positive
e0, e2:Z
x:=(IZR (Z.pos m1) * bpow radix2 e0)%R:R
y:=(IZR (Z.pos m2) * bpow radix2 e2)%R:R
H4:(cexp radix2 fexp x < cexp radix2 fexp y)%Z
H5:(mag radix2 y <= mag radix2 x)%Z

False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
m1, m2:positive
e0, e2:Z
x:=(IZR (Z.pos m1) * bpow radix2 e0)%R:R
y:=(IZR (Z.pos m2) * bpow radix2 e2)%R:R
H4:(cexp radix2 fexp x < cexp radix2 fexp y)%Z
H5:(y <= x)%R
(0 < y)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
m1, m2:positive
e0, e2:Z
x:=(IZR (Z.pos m1) * bpow radix2 e0)%R:R
y:=(IZR (Z.pos m2) * bpow radix2 e2)%R:R
H4:(cexp radix2 fexp x < cexp radix2 fexp y)%Z
H5:(mag radix2 y <= mag radix2 x)%Z

(cexp radix2 fexp y <= cexp radix2 fexp x)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
m1, m2:positive
e0, e2:Z
x:=(IZR (Z.pos m1) * bpow radix2 e0)%R:R
y:=(IZR (Z.pos m2) * bpow radix2 e2)%R:R
H4:(cexp radix2 fexp x < cexp radix2 fexp y)%Z
H5:(y <= x)%R
(0 < y)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
m1, m2:positive
e0, e2:Z
x:=(IZR (Z.pos m1) * bpow radix2 e0)%R:R
y:=(IZR (Z.pos m2) * bpow radix2 e2)%R:R
H4:(cexp radix2 fexp x < cexp radix2 fexp y)%Z
H5:(y <= x)%R

(0 < y)%R
now apply (F2R_gt_0 _ (Float radix2 (Zpos m2) e2)).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R

forall (m1 m2 : positive) (e0 e2 : Z), (IZR (- Z.pos m1) * bpow radix2 e0 < IZR (Z.pos m2) * bpow radix2 e2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
H5:forall (m1 m2 : positive) (e0 e2 : Z), (IZR (- Z.pos m1) * bpow radix2 e0 < IZR (Z.pos m2) * bpow radix2 e2)%R
(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R

forall (m1 m2 : positive) (e0 e2 : Z), (IZR (- Z.pos m1) * bpow radix2 e0 < IZR (Z.pos m2) * bpow radix2 e2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m3 m4 : positive) (e3 e4 : Z), let x := (IZR (Z.pos m3) * bpow radix2 e3)%R in let y := (IZR (Z.pos m4) * bpow radix2 e4)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
m1, m2:positive
e0, e2:Z

(IZR (- Z.pos m1) * bpow radix2 e0 < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m3 m4 : positive) (e3 e4 : Z), let x := (IZR (Z.pos m3) * bpow radix2 e3)%R in let y := (IZR (Z.pos m4) * bpow radix2 e4)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
m1, m2:positive
e0, e2:Z
(0 < IZR (Z.pos m2) * bpow radix2 e2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m3 m4 : positive) (e3 e4 : Z), let x := (IZR (Z.pos m3) * bpow radix2 e3)%R in let y := (IZR (Z.pos m4) * bpow radix2 e4)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
m1, m2:positive
e0, e2:Z

(0 < IZR (Z.pos m2) * bpow radix2 e2)%R
now apply (F2R_gt_0 _ (Float radix2 (Zpos m2) e2)).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
H5:forall (m1 m2 : positive) (e0 e2 : Z), (IZR (- Z.pos m1) * bpow radix2 e0 < IZR (Z.pos m2) * bpow radix2 e2)%R

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |}) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s0 (Z.pos m0); Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s:bool
m:positive
e:Z
H:e = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m); Fexp := e |})
H0:(e <=? emax - prec)%Z = true
s0:bool
m0:positive
e1:Z
H1:e1 = cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m0); Fexp := e1 |})
H2:(e1 <=? emax - prec)%Z = true
H3:Zcompare_prop e e1 (e ?= e1)%Z
H4:forall (m1 m2 : positive) (e0 e2 : Z), let x := (IZR (Z.pos m1) * bpow radix2 e0)%R in let y := (IZR (Z.pos m2) * bpow radix2 e2)%R in (cexp radix2 fexp x < cexp radix2 fexp y)%Z -> (x < y)%R
H5:forall (m1 m2 : positive) (e0 e2 : Z), (IZR (- Z.pos m1) * bpow radix2 e0 < IZR (Z.pos m2) * bpow radix2 e2)%R

(if s then if s0 then match (e ?= e1)%Z with | Eq => CompOpp (Pos.compare_cont Eq m m0) | Lt => Gt | Gt => Lt end else Lt else if s0 then Gt else match (e ?= e1)%Z with | Eq => Pos.compare_cont Eq m m0 | Lt => Lt | Gt => Gt end) = Rcompare (IZR (SpecFloatCopy.cond_Zopp s (Z.pos m)) * bpow radix2 e) (IZR (SpecFloatCopy.cond_Zopp s0 (Z.pos m0)) * bpow radix2 e1)
destruct s, s0; try (now apply_Rcompare; apply H5); inversion H3; try (apply_Rcompare; apply H4; rewrite H, H1 in H7; assumption); try (apply_Rcompare; do 2 rewrite opp_IZR, Ropp_mult_distr_l_reverse; apply Ropp_lt_contravar; apply H4; rewrite H, H1 in H7; assumption); rewrite H7, Rcompare_mult_r, Rcompare_IZR by (apply bpow_gt_0); reflexivity. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, Bcompare y x = match Bcompare x y with | Some c => Some (CompOpp c) | None => None end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x y : binary_float, Bcompare y x = match Bcompare x y with | Some c => Some (CompOpp c) | None => None end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x, y:binary_float

Bcompare y x = match Bcompare x y with | Some c => Some (CompOpp c) | None => None end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true

Some match (ey ?= ex)%Z with | Eq => CompOpp (Pos.compare_cont Eq my mx) | Lt => Gt | Gt => Lt end = Some (CompOpp match (ex ?= ey)%Z with | Eq => CompOpp (Pos.compare_cont Eq mx my) | Lt => Gt | Gt => Lt end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true
Some match (ey ?= ex)%Z with | Eq => Pos.compare_cont Eq my mx | Lt => Lt | Gt => Gt end = Some (CompOpp match (ex ?= ey)%Z with | Eq => Pos.compare_cont Eq mx my | Lt => Lt | Gt => Gt end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true

Some match (ey ?= ex)%Z with | Eq => CompOpp (Pos.compare_cont Eq my mx) | Lt => Gt | Gt => Lt end = Some (CompOpp match (ex ?= ey)%Z with | Eq => CompOpp (Pos.compare_cont Eq mx my) | Lt => Gt | Gt => Lt end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true

Some match CompOpp (ex ?= ey)%Z with | Eq => CompOpp (Pos.compare_cont Eq my mx) | Lt => Gt | Gt => Lt end = Some (CompOpp match (ex ?= ey)%Z with | Eq => CompOpp (Pos.compare_cont Eq mx my) | Lt => Gt | Gt => Lt end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true

Some match CompOpp Eq with | Eq => CompOpp (Pos.compare_cont Eq my mx) | Lt => Gt | Gt => Lt end = Some (CompOpp (CompOpp (Pos.compare_cont Eq mx my)))
now rewrite (Pcompare_antisym mx my).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true

Some match (ey ?= ex)%Z with | Eq => Pos.compare_cont Eq my mx | Lt => Lt | Gt => Gt end = Some (CompOpp match (ex ?= ey)%Z with | Eq => Pos.compare_cont Eq mx my | Lt => Lt | Gt => Gt end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true

Some match CompOpp (ex ?= ey)%Z with | Eq => Pos.compare_cont Eq my mx | Lt => Lt | Gt => Gt end = Some (CompOpp match (ex ?= ey)%Z with | Eq => Pos.compare_cont Eq mx my | Lt => Lt | Gt => Gt end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Bx:bounded mx ex = true
my:positive
ey:Z
By:bounded my ey = true

Some match CompOpp Eq with | Eq => Pos.compare_cont Eq my mx | Lt => Lt | Gt => Gt end = Some (CompOpp (Pos.compare_cont Eq mx my))
now rewrite Pcompare_antisym. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), bounded mx ex = true -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), bounded mx ex = true -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true

(F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:canonical_mantissa mx ex = true
H2:(ex <=? emax - prec)%Z = true

(F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:canonical_mantissa mx ex = true
H2:(ex <=? emax - prec)%Z = true

fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <=? emax - prec)%Z = true

fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <=? emax - prec)%Z = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <=? emax - prec)%Z = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(ex <= emax - prec)%Z -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(ex <= emax - prec)%Z -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z

(F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z

(Z.pos mx <> 0%Z -> mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.pos mx <> 0%Z -> Build_mag_prop radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) e' Ex = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R

(F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R

(F2R {| Fnum := Z.pos mx; Fexp := ex |} * bpow radix2 (- ex) < bpow radix2 e' * bpow radix2 (- ex))%R -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R

(IZR (Z.pos mx) * bpow radix2 (ex + - ex) < bpow radix2 (e' + - ex))%R -> (IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R

(IZR (Z.pos mx) * bpow radix2 (ex + - ex) < bpow radix2 (Zdigits radix2 (Z.pos mx) + ex + - ex))%R -> (IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R

(IZR (Z.pos mx) < bpow radix2 (Zdigits radix2 (Z.pos mx)))%R -> (IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) < IZR (radix2 ^ Zdigits radix2 (Z.pos mx)))%R

(IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(Z.succ (Z.pos mx) <= radix2 ^ Zdigits radix2 (Z.pos mx))%Z

(IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(Z.succ (Z.pos mx) <= radix2 ^ Zdigits radix2 (Z.pos mx))%Z

(IZR (Z.succ (Z.pos mx)) <= IZR (radix2 ^ Zdigits radix2 (Z.pos mx)))%R -> (IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) + 1 <= IZR (radix2 ^ Zdigits radix2 (Z.pos mx)))%R

(IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) + 1 + -1 <= IZR (radix2 ^ Zdigits radix2 (Z.pos mx)) + -1)%R

(IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(IZR (Z.pos mx) <= IZR (radix2 ^ Zdigits radix2 (Z.pos mx)) - 1)%R -> (IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R

(IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R

(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R -> (IZR (Z.pos mx) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R

((bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R

(bpow radix2 (Zdigits radix2 (Z.pos mx) + ex) - bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex

(bpow radix2 (Zdigits radix2 (Z.pos mx) + ex) - bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex

(Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec <= Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin)%Z -> (bpow radix2 (Zdigits radix2 (Z.pos mx) + ex) - bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec <= ex)%Z

(bpow radix2 (Zdigits radix2 (Z.pos mx) + ex) - bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec <= ex)%Z

(Z.pos (SpecFloatCopy.digits2_pos mx) + ex <= ex + prec)%Z -> (bpow radix2 (Zdigits radix2 (Z.pos mx) + ex) - bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(bpow radix2 (Zdigits radix2 (Z.pos mx) + ex) - bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(bpow radix2 (ex + prec) + - bpow radix2 ex <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(bpow radix2 (ex + prec) + - bpow radix2 ex <= bpow radix2 (emax - prec - ex + (ex + prec)) - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(bpow radix2 (ex + prec) + - bpow radix2 ex <= bpow radix2 (emax - prec - ex + (ex + prec)) - bpow radix2 (emax - prec - ex + ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(bpow radix2 (ex + prec) + - bpow radix2 ex <= bpow radix2 (emax - prec - ex) * bpow radix2 (ex + prec) - bpow radix2 (emax - prec - ex) * bpow radix2 ex)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(bpow radix2 (ex + prec) + - bpow radix2 ex <= bpow radix2 (emax - prec - ex) * (bpow radix2 (ex + prec) - bpow radix2 ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(1 * (bpow radix2 (ex + prec) + - bpow radix2 ex) <= bpow radix2 (emax - prec - ex) * (bpow radix2 (ex + prec) - bpow radix2 ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(0 <= bpow radix2 (ex + prec) - bpow radix2 ex)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z
(1 <= bpow radix2 (emax - prec - ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(0 <= bpow radix2 (ex + prec) - bpow radix2 ex)%R
apply Rle_0_minus, bpow_le; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Ex:(IZR (Z.pos mx) <= bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1)%R
H':(IZR (Z.pos mx) * bpow radix2 ex <= (bpow radix2 (Zdigits radix2 (Z.pos mx)) - 1) * bpow radix2 ex)%R
H1:Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex
H1':(Zdigits radix2 (Z.pos mx) + ex <= ex + prec)%Z

(1 <= bpow radix2 (emax - prec - ex))%R
change 1%R with (bpow radix2 0); apply bpow_le; lia. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), bounded mx ex = true -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), bounded mx ex = true -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:canonical_mantissa mx ex = true
H2:(ex <=? emax - prec)%Z = true

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:canonical_mantissa mx ex = true
H2:(ex <=? emax - prec)%Z = true

fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <=? emax - prec)%Z = true

fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <=? emax - prec)%Z = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <=? emax - prec)%Z = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(ex <= emax - prec)%Z -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(ex <= emax - prec)%Z -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z

(Z.pos mx <> 0%Z -> mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.pos mx <> 0%Z -> Build_mag_prop radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) e' Ex = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
(bpow radix2 e' <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(F2R {| Fnum := Z.abs (Z.pos mx); Fexp := ex |} < bpow radix2 e')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
(bpow radix2 e' <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
(bpow radix2 e' <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
(bpow radix2 e' <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(F2R {| Fnum := Z.pos mx; Fexp := ex |} > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
(bpow radix2 e' <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(bpow radix2 e' <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(e' <= emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(Zdigits radix2 (Z.pos mx) + ex <= emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
Z.pos mx <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(Zdigits radix2 (Z.pos mx) + ex <= emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H2:(ex <= emax - prec)%Z
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex -> (Zdigits radix2 (Z.pos mx) + ex <= emax)%Z
prec, emax:Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
H2:(ex <= emax - prec)%Z

fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex -> (Zdigits radix2 (Z.pos mx) + ex <= emax)%Z
prec, emax:Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
H2:(ex <= emax - prec)%Z

fexp (Zdigits radix2 (Z.pos mx) + ex) = ex -> (Zdigits radix2 (Z.pos mx) + ex <= emax)%Z
prec, emax:Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
H2:(ex <= emax - prec)%Z

Z.max (Zdigits radix2 (Z.pos mx) + ex - prec) emin = ex -> (Zdigits radix2 (Z.pos mx) + ex <= emax)%Z
intros ; zify ; omega. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), bounded mx ex = true -> (bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), bounded mx ex = true -> (bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true

(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:canonical_mantissa mx ex = true

(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex

(Z.pos mx <> 0%Z -> mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.pos mx <> 0%Z -> Build_mag_prop radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) e' Ex = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z) -> (bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z

(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

(bpow radix2 emin <= bpow radix2 (e' - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z
F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

(bpow radix2 emin <= bpow radix2 (e' - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

(emin <= e' - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

(emin <= Zdigits radix2 (Z.pos mx) + ex - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex) = ex -> (emin <= Zdigits radix2 (Z.pos mx) + ex - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

fexp (Zdigits radix2 (Z.pos mx) + ex) = ex -> (emin <= Zdigits radix2 (Z.pos mx) + ex - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

forall z : Z, (0 < z)%Z -> fexp (z + ex) = ex -> (emin <= z + ex - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Hx:bounded mx ex = true
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 e')%R
H:Z.pos mx <> 0%Z -> e' = (Zdigits radix2 (Z.pos mx) + ex)%Z
H0:Z.pos mx <> 0%Z

forall z : Z, (0 < z)%Z -> Z.max (z + ex - prec) emin = ex -> (emin <= z + ex - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
ex:Z

forall z : Z, (0 < z)%Z -> Z.max (z + ex - prec) emin = ex -> (emin <= z + ex - 1)%Z
prec, emax:Z
prec_gt_0_:(0 < prec)%Z
emin:=(3 - emax - prec)%Z:Z
ex:Z

forall z : Z, (0 < z)%Z -> Z.max (z + ex - prec) emin = ex -> (emin <= z + ex - 1)%Z
prec, emax:Z
prec_gt_0_:(0 < prec)%Z
emin, ex:Z

forall z : Z, (0 < z)%Z -> Z.max (z + ex - prec) emin = ex -> (emin <= z + ex - 1)%Z
intros ; zify ; omega. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, (Rabs (B2R x) <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, (Rabs (B2R x) <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) <= bpow radix2 emax - bpow radix2 (emax - prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

(F2R {| Fnum := Z.abs (Z.pos mx); Fexp := ex |} <= bpow radix2 emax - bpow radix2 (emax - prec))%R
now apply bounded_le_emax_minus_prec. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, (Rabs (B2R x) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, (Rabs (B2R x) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

(F2R {| Fnum := Z.abs (Z.pos mx); Fexp := ex |} < bpow radix2 emax)%R
now apply bounded_lt_emax. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, is_finite_strict x = true -> (bpow radix2 emin <= Rabs (B2R x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall x : binary_float, is_finite_strict x = true -> (bpow radix2 emin <= Rabs (B2R x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

true = true -> (bpow radix2 emin <= Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true

(bpow radix2 emin <= Rabs (F2R {| Fnum := Z.neg mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true
(bpow radix2 emin <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true

(bpow radix2 emin <= Rabs (F2R {| Fnum := Z.neg mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true

(bpow radix2 emin <= IZR (Z.pos mx) * Rabs (bpow radix2 ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true

(bpow radix2 emin <= IZR (Z.pos mx) * bpow radix2 ex)%R
now apply bounded_ge_emin.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true

(bpow radix2 emin <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true

(bpow radix2 emin <= IZR (Z.pos mx) * Rabs (bpow radix2 ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H:true = true

(bpow radix2 emin <= IZR (Z.pos mx) * bpow radix2 ex)%R
now apply bounded_ge_emin. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |} -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R -> bounded mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |} -> (F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R -> bounded mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

bounded mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

canonical_mantissa mx ex = true /\ (ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

canonical_mantissa mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

Zeq_bool (fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)) ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

Zeq_bool (fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)) ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

Zeq_bool (fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)) (cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

Zeq_bool (fexp (Zdigits radix2 (Z.pos mx) + ex)) (cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

Zeq_bool (fexp (Zdigits radix2 (Z.pos mx) + ex)) (fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

Zeq_bool (fexp (Zdigits radix2 (Z.pos mx) + ex)) (fexp (Zdigits radix2 (Z.pos mx) + ex)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
Z.pos mx <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

Zeq_bool (fexp (Zdigits radix2 (Z.pos mx) + ex)) (fexp (Zdigits radix2 (Z.pos mx) + ex)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

(ex <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

(ex <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

(ex <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

(cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |}) <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R

(Z.max (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - prec) emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.max (Build_mag_prop radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) e' Ex - prec) emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(Z.max (e' - prec) emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(e' - prec <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(e' - 1 < emax)%Z -> (e' - prec <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(e' - 1 < emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(e' - 1 < emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(bpow radix2 (e' - 1) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(bpow radix2 (e' - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(bpow radix2 (e' - 1) <= F2R {| Fnum := Z.abs (Z.pos mx); Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(F2R {| Fnum := Z.pos mx; Fexp := ex |} > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R
(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(emin <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(3 - emax - prec <= emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
Cx:ex = cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
e':Z
Ex:F2R {| Fnum := Z.pos mx; Fexp := ex |} <> 0%R -> (bpow radix2 (e' - 1) <= Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) < bpow radix2 e')%R

(0 < prec)%Z -> (3 - emax - prec <= emax - prec)%Z
clear -Hmax ; omega. Qed.
Truncation
Record shr_record := { shr_m : Z ; shr_r : bool ; shr_s : bool }.

Definition shr_1 mrs :=
  let '(Build_shr_record m r s) := mrs in
  let s := orb r s in
  match m with
  | Z0 => Build_shr_record Z0 false s
  | Zpos xH => Build_shr_record Z0 true s
  | Zpos (xO p) => Build_shr_record (Zpos p) false s
  | Zpos (xI p) => Build_shr_record (Zpos p) true s
  | Zneg xH => Build_shr_record Z0 true s
  | Zneg (xO p) => Build_shr_record (Zneg p) false s
  | Zneg (xI p) => Build_shr_record (Zneg p) true s
  end.

Definition loc_of_shr_record mrs :=
  match mrs with
  | Build_shr_record _ false false => loc_Exact
  | Build_shr_record _ false true => loc_Inexact Lt
  | Build_shr_record _ true false => loc_Inexact Eq
  | Build_shr_record _ true true => loc_Inexact Gt
  end.

Definition shr_record_of_loc m l :=
  match l with
  | loc_Exact => Build_shr_record m false false
  | loc_Inexact Lt => Build_shr_record m false true
  | loc_Inexact Eq => Build_shr_record m true false
  | loc_Inexact Gt => Build_shr_record m true true
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : Z) (l : SpecFloatCopy.location), shr_m (shr_record_of_loc m l) = m
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : Z) (l : SpecFloatCopy.location), shr_m (shr_record_of_loc m l) = m
now intros m [|[| |]]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : Z) (l : SpecFloatCopy.location), loc_of_shr_record (shr_record_of_loc m l) = l
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : Z) (l : SpecFloatCopy.location), loc_of_shr_record (shr_record_of_loc m l) = l
now intros m [|[| |]]. Qed. Definition shr mrs e n := match n with | Zpos p => (iter_pos shr_1 p mrs, (e + n)%Z) | _ => (mrs, e) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : R) (mrs : shr_record) (e : Z), (0 <= shr_m mrs)%Z -> inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : R) (mrs : shr_record) (e : Z), (0 <= shr_m mrs)%Z -> inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + 2 * bpow radix2 e) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
(0 < bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
(0 <= (if shr_r (shr_1 mrs) then 1 else 0) < 2)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + 2 * bpow radix2 e) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
(0 <= (if shr_r (shr_1 mrs) then 1 else 0) < 2)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + 2 * bpow radix2 e) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + bpow radix2 1 * bpow radix2 e) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + bpow radix2 (1 + e)) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + F2R {| Fnum := 1; Fexp := e + 1 |}) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween_float radix2 (shr_m (shr_1 mrs)) (e + 1) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (Fnum {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) * bpow radix2 (Fexp {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |})) (IZR (Fnum {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) * bpow radix2 (Fexp {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) + IZR (Fnum {| Fnum := 1; Fexp := e + 1 |}) * bpow radix2 (Fexp {| Fnum := 1; Fexp := e + 1 |})) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween (IZR (Fnum {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |}) * bpow radix2 (Fexp {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |})) (IZR (Fnum {| Fnum := shr_m (shr_1 mrs) + 1; Fexp := e + 1 |}) * bpow radix2 (Fexp {| Fnum := shr_m (shr_1 mrs) + 1; Fexp := e + 1 |})) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1)) (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1) + 1 * bpow radix2 (e + 1)) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1)) (IZR (shr_m (shr_1 mrs) + 1) * bpow radix2 (e + 1)) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1)) (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1) + 1 * bpow radix2 (e + 1)) x (new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)) -> inbetween (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1)) (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1) + 1 * bpow radix2 (e + 1)) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1)) (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1) + 1 * bpow radix2 (e + 1)) x (loc_of_shr_record (shr_1 mrs)) -> inbetween (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1)) (IZR (shr_m (shr_1 mrs)) * bpow radix2 (e + 1) + 1 * bpow radix2 (e + 1)) x (loc_of_shr_record (shr_1 mrs))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
loc_of_shr_record (shr_1 mrs) = new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

loc_of_shr_record (shr_1 mrs) = new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
mrs:shr_record
Hm:(0 <= shr_m mrs)%Z

loc_of_shr_record (shr_1 mrs) = new_location_even 2 (if shr_r (shr_1 mrs) then 1%Z else 0%Z) (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
m:Z
r, s:bool
Hm:(0 <= shr_m {| shr_m := m; shr_r := r; shr_s := s |})%Z

loc_of_shr_record (shr_1 {| shr_m := m; shr_r := r; shr_s := s |}) = new_location_even 2 (if shr_r (shr_1 {| shr_m := m; shr_r := r; shr_s := s |}) then 1%Z else 0%Z) (loc_of_shr_record {| shr_m := m; shr_r := r; shr_s := s |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs); Fexp := e + 1 |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
(e <= e + 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (F2R {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |} + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (F2R {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |} + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (Fnum {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |}) * bpow radix2 (Fexp {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |}) + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (IZR (Fnum {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |}) * bpow radix2 (Fexp {| Fnum := shr_m (shr_1 mrs) * radix2 ^ (e + 1 - e); Fexp := e |}) + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e)) * bpow radix2 e + IZR (if shr_r (shr_1 mrs) then 1%Z else 0%Z) * bpow radix2 e) (IZR (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e)) * bpow radix2 e + IZR ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e) + (if shr_r (shr_1 mrs) then 1%Z else 0%Z)) * bpow radix2 e) (IZR (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e) + ((if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1)) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e) + (if shr_r (shr_1 mrs) then 1%Z else 0%Z)) * bpow radix2 e) (IZR (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e) + (if shr_r (shr_1 mrs) then 1%Z else 0%Z) + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

inbetween (IZR (shr_m mrs) * bpow radix2 e) (IZR (shr_m mrs + 1) * bpow radix2 e) x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)
shr_m mrs = (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e) + (if shr_r (shr_1 mrs) then 1 else 0))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

shr_m mrs = (shr_m (shr_1 mrs) * 2 ^ (e + 1 - e) + (if shr_r (shr_1 mrs) then 1 else 0))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

shr_m mrs = (shr_m (shr_1 mrs) * 2 ^ 1 + (if shr_r (shr_1 mrs) then 1 else 0))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

shr_m mrs = (shr_m (shr_1 mrs) * 2 + (if shr_r (shr_1 mrs) then 1 else 0))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
mrs:shr_record
e:Z
Hm:(0 <= shr_m mrs)%Z
Hl:inbetween_float radix2 (shr_m mrs) e x (loc_of_shr_record mrs)

shr_m mrs = (2 * shr_m (shr_1 mrs) + (if shr_r (shr_1 mrs) then 1 else 0))%Z
mrs:shr_record
Hm:(0 <= shr_m mrs)%Z

shr_m mrs = (2 * shr_m (shr_1 mrs) + (if shr_r (shr_1 mrs) then 1 else 0))%Z
m:Z
r, s:bool
Hm:(0 <= shr_m {| shr_m := m; shr_r := r; shr_s := s |})%Z

shr_m {| shr_m := m; shr_r := r; shr_s := s |} = (2 * shr_m (shr_1 {| shr_m := m; shr_r := r; shr_s := s |}) + (if shr_r (shr_1 {| shr_m := m; shr_r := r; shr_s := s |}) then 1 else 0))%Z
now destruct m as [|[m|m|]|m] ; try (now elim Hm) ; destruct r as [|] ; destruct s as [|]. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : R) (m e : Z) (l : SpecFloatCopy.location) (n : Z), (0 <= m)%Z -> inbetween_float radix2 m e x l -> let '(mrs, e') := shr (shr_record_of_loc m l) e n in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (x : R) (m e : Z) (l : SpecFloatCopy.location) (n : Z), (0 <= m)%Z -> inbetween_float radix2 m e x l -> let '(mrs, e') := shr (shr_record_of_loc m l) e n in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:Z
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

let '(mrs, e') := shr (shr_record_of_loc m l) e n in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

let '(mrs, e') := shr (shr_record_of_loc m l) e 0 in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
let '(mrs, e') := shr (shr_record_of_loc m l) e (Z.pos n) in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
let '(mrs, e') := shr (shr_record_of_loc m l) e (Z.neg n) in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

let '(mrs, e') := shr (shr_record_of_loc m l) e (Z.pos n) in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
let '(mrs, e') := shr (shr_record_of_loc m l) e (Z.neg n) in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

let '(mrs, e') := shr (shr_record_of_loc m l) e (Z.pos n) in inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

inbetween_float radix2 (shr_m (SpecFloatCopy.iter_pos shr_1 n (shr_record_of_loc m l))) (e + Z.pos n) x (loc_of_shr_record (SpecFloatCopy.iter_pos shr_1 n (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

inbetween_float radix2 (shr_m (iter_nat shr_1 (Pos.to_nat n) (shr_record_of_loc m l))) (e + Z.pos n) x (loc_of_shr_record (iter_nat shr_1 (Pos.to_nat n) (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

inbetween_float radix2 (shr_m (iter_nat shr_1 (Pos.to_nat n) (shr_record_of_loc m l))) (e + Z.of_nat (Pos.to_nat n)) x (loc_of_shr_record (iter_nat shr_1 (Pos.to_nat n) (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

inbetween_float radix2 (shr_m (iter_nat shr_1 0 (shr_record_of_loc m l))) (e + Z.of_nat 0) x (loc_of_shr_record (iter_nat shr_1 0 (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))
inbetween_float radix2 (shr_m (iter_nat shr_1 (S n0) (shr_record_of_loc m l))) (e + Z.of_nat (S n0)) x (loc_of_shr_record (iter_nat shr_1 (S n0) (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

inbetween_float radix2 (shr_m (shr_record_of_loc m l)) (e + 0) x (loc_of_shr_record (shr_record_of_loc m l))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))
inbetween_float radix2 (shr_m (iter_nat shr_1 (S n0) (shr_record_of_loc m l))) (e + Z.of_nat (S n0)) x (loc_of_shr_record (iter_nat shr_1 (S n0) (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l

inbetween_float radix2 (shr_m (shr_record_of_loc m l)) e x (loc_of_shr_record (shr_record_of_loc m l))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))
inbetween_float radix2 (shr_m (iter_nat shr_1 (S n0) (shr_record_of_loc m l))) (e + Z.of_nat (S n0)) x (loc_of_shr_record (iter_nat shr_1 (S n0) (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))

inbetween_float radix2 (shr_m (iter_nat shr_1 (S n0) (shr_record_of_loc m l))) (e + Z.of_nat (S n0)) x (loc_of_shr_record (iter_nat shr_1 (S n0) (shr_record_of_loc m l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))

inbetween_float radix2 (shr_m (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l)))) (e + Z.of_nat (S n0)) x (loc_of_shr_record (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l))))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))

inbetween_float radix2 (shr_m (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l)))) (e + Z.succ (Z.of_nat n0)) x (loc_of_shr_record (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l))))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))

inbetween_float radix2 (shr_m (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l)))) (e + (Z.of_nat n0 + 1)) x (loc_of_shr_record (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l))))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat
IHn0:inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l)))

inbetween_float radix2 (shr_m (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l)))) (e + Z.of_nat n0 + 1) x (loc_of_shr_record (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l))))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat

inbetween_float radix2 (shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l))) (e + Z.of_nat n0) x (loc_of_shr_record (iter_nat shr_1 n0 (shr_record_of_loc m l))) -> inbetween_float radix2 (shr_m (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l)))) (e + Z.of_nat n0 + 1) x (loc_of_shr_record (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l))))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
x:R
m, e:Z
l:SpecFloatCopy.location
n:positive
Hm:(0 <= m)%Z
Hl:inbetween_float radix2 m e x l
n0:nat

(0 <= shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l)))%Z
m:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
n0:nat

(0 <= shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l)))%Z
m:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z

(0 <= shr_m (iter_nat shr_1 0 (shr_record_of_loc m l)))%Z
m:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
n0:nat
IHn0:(0 <= shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l)))%Z
(0 <= shr_m (iter_nat shr_1 (S n0) (shr_record_of_loc m l)))%Z
m:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
n0:nat
IHn0:(0 <= shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l)))%Z

(0 <= shr_m (iter_nat shr_1 (S n0) (shr_record_of_loc m l)))%Z
m:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
n0:nat
IHn0:(0 <= shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l)))%Z

(0 <= shr_m (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l))))%Z
m:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
n0:nat

(0 <= shr_m (iter_nat shr_1 n0 (shr_record_of_loc m l)))%Z -> (0 <= shr_m (shr_1 (iter_nat shr_1 n0 (shr_record_of_loc m l))))%Z
m:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
n0:nat

forall s : shr_record, (0 <= shr_m s)%Z -> (0 <= shr_m (shr_1 s))%Z

forall s : shr_record, (0 <= shr_m s)%Z -> (0 <= shr_m (shr_1 s))%Z
m:Z
r, s:bool
Hm:(0 <= shr_m {| shr_m := m; shr_r := r; shr_s := s |})%Z

(0 <= shr_m (shr_1 {| shr_m := m; shr_r := r; shr_s := s |}))%Z
now destruct m as [|[m|m|]|m] ; try (now elim Hm) ; destruct r as [|] ; destruct s as [|]. Qed. Definition shr_fexp m e l := shr (shr_record_of_loc m l) e (fexp (Zdigits2 m + e) - e).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m e : Z) (l : SpecFloatCopy.location), (0 <= m)%Z -> shr_fexp m e l = (let '(m', e', l') := truncate radix2 fexp (m, e, l) in (shr_record_of_loc m' l', e'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m e : Z) (l : SpecFloatCopy.location), (0 <= m)%Z -> shr_fexp m e l = (let '(m', e', l') := truncate radix2 fexp (m, e, l) in (shr_record_of_loc m' l', e'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z

shr_fexp m e l = (let '(m', e', l') := truncate radix2 fexp (m, e, l) in (shr_record_of_loc m' l', e'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z

forall (p : Z * Z) (l0 : SpecFloatCopy.location), truncate radix2 fexp (m, e, l) = (p, l0) -> shr_fexp m e l = (let '(m', e') := p in (shr_record_of_loc m' l0, e'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr_fexp m e l = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (fexp (SpecFloatCopy.Zdigits2 m + e) - e) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location

(fexp (Zdigits radix2 m + e) - e)%Z = 0%Z -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e 0 = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
He:(fexp (Zdigits radix2 m + e) - e)%Z = 0%Z

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e 0 = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
He:(fexp (Zdigits radix2 m + e) - e)%Z = 0%Z

(if (0 <? fexp (Zdigits radix2 m + e) - e)%Z then truncate_aux radix2 (m, e, l) (fexp (Zdigits radix2 m + e) - e) else (m, e, l)) = (m', e', l') -> shr (shr_record_of_loc m l) e 0 = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
He:(fexp (Zdigits radix2 m + e) - e)%Z = 0%Z

(if (0 <? 0)%Z then truncate_aux radix2 (m, e, l) 0 else (m, e, l)) = (m', e', l') -> shr (shr_record_of_loc m l) e 0 = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
He:(fexp (Zdigits radix2 m + e) - e)%Z = 0%Z

(m, e, l) = (m', e', l') -> (shr_record_of_loc m l, e) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
He:(fexp (Zdigits radix2 m + e) - e)%Z = 0%Z
H:(m, e, l) = (m', e', l')

(shr_record_of_loc m l, e) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location

forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p

(e <= fexp (Zdigits radix2 m + e))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l

(let '(mrs, e'0) := shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) in inbetween_float radix2 (shr_m mrs) e'0 x (loc_of_shr_record mrs)) -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l

(0 <= x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
(let '(mrs, e'0) := shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) in inbetween_float radix2 (shr_m mrs) e'0 x (loc_of_shr_record mrs)) -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l

(0 <= F2R {| Fnum := m; Fexp := e |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
(F2R {| Fnum := m; Fexp := e |} <= x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
(let '(mrs, e'0) := shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) in inbetween_float radix2 (shr_m mrs) e'0 x (loc_of_shr_record mrs)) -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l

(F2R {| Fnum := m; Fexp := e |} <= x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
(let '(mrs, e'0) := shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) in inbetween_float radix2 (shr_m mrs) e'0 x (loc_of_shr_record mrs)) -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R

(let '(mrs, e'0) := shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) in inbetween_float radix2 (shr_m mrs) e'0 x (loc_of_shr_record mrs)) -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R

forall (s : shr_record) (z : Z), shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (s, z) -> inbetween_float radix2 (shr_m s) z x (loc_of_shr_record s) -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')

shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')

(let '(m'0, e'0, l'0) := truncate radix2 fexp (m, e, l) in inbetween_float radix2 m'0 e'0 x l'0 /\ (e'0 = cexp radix2 fexp x \/ l'0 = SpecFloatCopy.loc_Exact /\ generic_format radix2 fexp x)) -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')

inbetween_float radix2 m' e' x l' /\ (e' = cexp radix2 fexp x \/ l' = SpecFloatCopy.loc_Exact /\ generic_format radix2 fexp x) -> shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'

shr (shr_record_of_loc m l) e (Z.pos p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'

(mrs, e'') = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'

e'' = e'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'
(mrs, e'') = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'

snd (mrs, e'') = snd (fst (m', e', l'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'
(mrs, e'') = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'

snd (shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e)) = snd (fst (truncate radix2 fexp (m, e, l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'
(mrs, e'') = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'

snd (shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e)) = snd (fst (if (0 <? fexp (Zdigits radix2 m + e) - e)%Z then truncate_aux radix2 (m, e, l) (fexp (Zdigits radix2 m + e) - e) else (m, e, l)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'
(mrs, e'') = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e'' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'

(mrs, e'') = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'

(mrs, e') = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'

mrs = shr_record_of_loc m' l'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'
H5:m' = shr_m mrs
H6:l' = loc_of_shr_record mrs

mrs = shr_record_of_loc m' l'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'
H5:m' = shr_m mrs
H6:l' = loc_of_shr_record mrs

mrs = shr_record_of_loc (shr_m mrs) (loc_of_shr_record mrs)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.pos p
He:(e <= fexp (Zdigits radix2 m + e))%Z
x:R
Hx:inbetween_float radix2 m e x l
Hx0:(0 <= x)%R
mrs:shr_record
e'':Z
H3:shr (shr_record_of_loc m l) e (fexp (Zdigits radix2 m + e) - e) = (mrs, e'')
H4:inbetween_float radix2 (shr_m mrs) e' x (loc_of_shr_record mrs)
H1:truncate radix2 fexp (m, e, l) = (m', e', l')
H2:inbetween_float radix2 m' e' x l'
H:e'' = e'
H5:m' = shr_m mrs
H6:l' = loc_of_shr_record mrs

forall (shr_m0 : Z) (shr_r0 shr_s0 : bool), {| shr_m := shr_m0; shr_r := shr_r0; shr_s := shr_s0 |} = shr_record_of_loc (shr_m {| shr_m := shr_m0; shr_r := shr_r0; shr_s := shr_s0 |}) (loc_of_shr_record {| shr_m := shr_m0; shr_r := shr_r0; shr_s := shr_s0 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location

forall p : positive, (fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p -> truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p

truncate radix2 fexp (m, e, l) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p

(if (0 <? fexp (Zdigits radix2 m + e) - e)%Z then truncate_aux radix2 (m, e, l) (fexp (Zdigits radix2 m + e) - e) else (m, e, l)) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p

(if (0 <? Z.neg p)%Z then truncate_aux radix2 (m, e, l) (Z.neg p) else (m, e, l)) = (m', e', l') -> shr (shr_record_of_loc m l) e (Z.neg p) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p

(m, e, l) = (m', e', l') -> (shr_record_of_loc m l, e) = (shr_record_of_loc m' l', e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m, e:Z
l:SpecFloatCopy.location
Hm:(0 <= m)%Z
m', e':Z
l':SpecFloatCopy.location
p:positive
Hp:(fexp (Zdigits radix2 m + e) - e)%Z = Z.neg p
H:(m, e, l) = (m', e', l')

(shr_record_of_loc m l, e) = (shr_record_of_loc m' l', e')
now inversion H. Qed.
Rounding modes
Inductive mode := mode_NE | mode_ZR | mode_DN | mode_UP | mode_NA.

Definition round_mode m :=
  match m with
  | mode_NE => ZnearestE
  | mode_ZR => Ztrunc
  | mode_DN => Zfloor
  | mode_UP => Zceil
  | mode_NA => ZnearestA
  end.

Definition choice_mode m sx mx lx :=
  match m with
  | mode_NE => cond_incr (round_N (negb (Z.even mx)) lx) mx
  | mode_ZR => mx
  | mode_DN => cond_incr (round_sign_DN sx lx) mx
  | mode_UP => cond_incr (round_sign_UP sx lx) mx
  | mode_NA => cond_incr (round_N true lx) mx
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall m : mode, Valid_rnd (round_mode m)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall m : mode, Valid_rnd (round_mode m)
destruct m ; unfold round_mode ; auto with typeclass_instances. Qed. Definition overflow_to_inf m s := match m with | mode_NE => true | mode_NA => true | mode_ZR => false | mode_UP => negb s | mode_DN => s end. Definition binary_overflow m s := if overflow_to_inf m s then F754_infinity s else F754_finite s (match (Zpower 2 prec - 1)%Z with Zpos p => p | _ => xH end) (emax - prec). Definition binary_round_aux mode sx mx ex lx := let '(mrs', e') := shr_fexp mx ex lx in let '(mrs'', e'') := shr_fexp (choice_mode mode sx (shr_m mrs') (loc_of_shr_record mrs')) e' loc_Exact in match shr_m mrs'' with | Z0 => F754_zero sx | Zpos m => if Zle_bool e'' (emax - prec) then F754_finite sx m e'' else binary_overflow mode sx | _ => F754_nan false xH (* dummy *) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mode0 : mode) (x : R) (mx ex : Z) (lx : SpecFloatCopy.location), x <> 0%R -> inbetween_float radix2 mx ex (Rabs x) lx -> (ex <= cexp radix2 fexp x)%Z -> let z := binary_round_aux mode0 (Rlt_bool x 0) mx ex lx in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode mode0) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode mode0) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow mode0 (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mode0 : mode) (x : R) (mx ex : Z) (lx : SpecFloatCopy.location), x <> 0%R -> inbetween_float radix2 mx ex (Rabs x) lx -> (ex <= cexp radix2 fexp x)%Z -> let z := binary_round_aux mode0 (Rlt_bool x 0) mx ex lx in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode mode0) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode mode0) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow mode0 (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
z:=binary_round_aux m (Rlt_bool x 0) mx ex lx:full_float

valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
z:=let '(mrs', e') := shr_fexp mx ex lx in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end:full_float

valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z

let z := let '(mrs', e') := shr_fexp mx ex lx in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z

let z := let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z

round radix2 fexp (round_mode m) x = (let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m' l'); Fexp := e' |}) -> valid_binary (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z

round radix2 fexp (round_mode m) x = (let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m' l'); Fexp := e' |}) -> valid_binary (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z

(let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in inbetween_float radix2 m' e' (Rabs x) l' /\ e' = cexp radix2 fexp (Rabs x)) -> round radix2 fexp (round_mode m) x = (let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m' l'); Fexp := e' |}) -> valid_binary (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location

inbetween_float radix2 m1 e1 (Rabs x) l1 /\ e1 = cexp radix2 fexp (Rabs x) -> round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m1 l1); Fexp := e1 |} -> valid_binary (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location

inbetween_float radix2 m1 e1 (Rabs x) l1 /\ e1 = cexp radix2 fexp (Rabs x) -> round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m1 l1); Fexp := e1 |} -> valid_binary (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z

inbetween_float radix2 m1 e1 (Rabs x) l1 /\ e1 = cexp radix2 fexp (Rabs x) -> round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} -> valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

(m1 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

(m1 <= match m with | mode_NE => if round_N (negb (Z.even m1)) l1 then m1 + 1 else m1 | mode_ZR => m1 | mode_DN => if round_sign_DN (Rlt_bool x 0) l1 then m1 + 1 else m1 | mode_UP => if round_sign_UP (Rlt_bool x 0) l1 then m1 + 1 else m1 | mode_NA => if round_N true l1 then m1 + 1 else m1 end)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.abs m1'; Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'); Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1') = Z.abs m1'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1') = Z.abs m1'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1') = Z.abs m1'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 <= m1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 < Z.succ m1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 < F2R {| Fnum := Z.succ m1; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(Rabs x < F2R {| Fnum := Z.succ m1; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}

inbetween_float radix2 m1' e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
Br:inbetween_float radix2 m1' e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
Br:inbetween_float radix2 m1' e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* . m1' = 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
(0 <= 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(let '(m', _, _) := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in m' = 0%Z) -> valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location

m2 = 0%Z -> valid_binary match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location

m2 = 0%Z -> valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

valid_binary (F754_zero (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0 else F754_zero (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0 else F754_zero (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z
(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z
(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} = FF2R radix2 (F754_zero (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z
(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* . 0 < m1' *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(e1 <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
Z.pos m1' <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(e1 <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(cexp radix2 fexp (Rabs x) <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(cexp radix2 fexp x <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(cexp radix2 fexp x <= cexp radix2 fexp (round radix2 fexp (round_mode m) x))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

round radix2 fexp (round_mode m) x <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos m1'); Fexp := e1 |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
(0 < Rabs (round radix2 fexp (round_mode m) x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
Z.pos m1' <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
(0 <= Z.pos m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2, e2:Z
l2:SpecFloatCopy.location

F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m2; Fexp := e2 |} /\ e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |}) -> inbetween_float radix2 m2 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2 /\ e2 = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x)) -> valid_binary match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2, e2:Z
l2:SpecFloatCopy.location

F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m2; Fexp := e2 |} /\ e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |}) -> inbetween_float radix2 m2 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2 /\ e2 = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x)) -> valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2, e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 m2 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := 0; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 0 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (F754_zero (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0 else F754_zero (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := 0; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 0 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.pos m1'; Fexp := e1 |} > F2R {| Fnum := 0; Fexp := e2 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := 0; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 0 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.pos m1'; Fexp := e1 |} > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

bounded m2 e2 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

canonical_mantissa m2 e2 = true /\ (e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

canonical_mantissa m2 e2 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

Zeq_bool (fexp (Z.pos (SpecFloatCopy.digits2_pos m2) + e2)) e2 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

fexp (Z.pos (SpecFloatCopy.digits2_pos m2) + e2) = e2
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

fexp (Zdigits radix2 (Z.pos m2) + e2) = e2
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

fexp (mag radix2 (F2R {| Fnum := Z.pos m2; Fexp := e2 |})) = e2
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
Z.pos m2 <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

e2 = fexp (mag radix2 (F2R {| Fnum := Z.pos m2; Fexp := e2 |}))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
Z.pos m2 <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

Z.pos m2 <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (binary_overflow m (Rlt_bool x 0)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (if overflow_to_inf m (Rlt_bool x 0) then F754_infinity (Rlt_bool x 0) else F754_finite (Rlt_bool x 0) match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (F754_infinity (Rlt_bool x 0)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (F754_finite (Rlt_bool x 0) match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (F754_finite (Rlt_bool x 0) match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(canonical_mantissa match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec) && (emax - prec <=? emax - prec)%Z)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(canonical_mantissa match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec) && true)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

canonical_mantissa match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

fexp (Z.pos (SpecFloatCopy.digits2_pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end) + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

fexp (Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end) + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

fexp (prec + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

Z.max (prec + (emax - prec) - prec) (3 - emax - prec) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(0 < prec)%Z -> Z.max (prec + (emax - prec) - prec) (3 - emax - prec) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

prec = Zdigits radix2 (Z.pos match (radix2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(radix2 ^ prec - 1)%Z = 0%Z -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(radix2 ^ prec - 1)%Z = 0%Z -> prec = 1%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(1 < radix2 ^ prec)%Z -> (radix2 ^ prec - 1)%Z = 0%Z -> prec = 1%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec <= Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec - 1 < Zdigits radix2 (Z.pos p))%Z -> (prec <= Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(prec - 1 < Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec - 1 < Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) <= Z.abs (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) <= Z.pos p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) <= radix2 ^ prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) < radix2 ^ prec)%Z -> (radix2 ^ (prec - 1) <= radix2 ^ prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(radix2 ^ (prec - 1) < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(IZR (radix2 ^ (prec - 1)) < IZR (radix2 ^ prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(bpow radix2 (prec - 1) < bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(bpow radix2 (prec - 1) < bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec - 1 < prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(Z.abs (Z.pos p) < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(Z.pos p < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ prec - 1 < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.neg p

prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.neg p

(1 < radix2 ^ prec)%Z -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

~ (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = bounded m2 e2 -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = (canonical_mantissa m2 e2 && (e2 <=? emax - prec)%Z)%bool -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = (canonical_mantissa m2 e2 && false)%bool -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = false -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

true = false -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
canonical radix2 fexp {| Fnum := Z.pos m2; Fexp := e2 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

canonical radix2 fexp {| Fnum := Z.pos m2; Fexp := e2 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

Fexp {| Fnum := Z.pos m2; Fexp := e2 |} = cexp radix2 fexp (F2R {| Fnum := Z.pos m2; Fexp := e2 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.pos m1'; Fexp := e1 |} > F2R {| Fnum := Z.neg m2; Fexp := e2 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.neg m2; Fexp := e2 |} < R0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
(R0 < F2R {| Fnum := Z.pos m1'; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(R0 < F2R {| Fnum := Z.pos m1'; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

generic_format radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

generic_format radix2 fexp (round radix2 fexp (round_mode m) x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* . not m1' < 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(Rabs (round radix2 fexp (round_mode m) x) > F2R {| Fnum := Z.neg m1'; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(F2R {| Fnum := Z.neg m1'; Fexp := e1 |} < R0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
(R0 <= Rabs (round radix2 fexp (round_mode m) x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(R0 <= Rabs (round radix2 fexp (round_mode m) x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp (Rabs x))%Z

(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z

forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
(* all the modes are valid *)
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode m x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NE x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NE (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_ZR x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_ZR (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_DN x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_DN (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_ZR x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_ZR (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_DN x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_DN (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_DN x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_DN (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z
(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:inbetween_float radix2 mx ex (Rabs x) lx
Ex:(ex <= cexp radix2 fexp x)%Z

(0 <= mx)%Z
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:(F2R {| Fnum := mx; Fexp := ex |} <= Rabs x < F2R {| Fnum := mx + 1; Fexp := ex |})%R
Ex:(ex <= cexp radix2 fexp x)%Z

(0 <= mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:(F2R {| Fnum := mx; Fexp := ex |} <= Rabs x < F2R {| Fnum := mx + 1; Fexp := ex |})%R
Ex:(ex <= cexp radix2 fexp x)%Z

(0 < Z.succ mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:(F2R {| Fnum := mx; Fexp := ex |} <= Rabs x < F2R {| Fnum := mx + 1; Fexp := ex |})%R
Ex:(ex <= cexp radix2 fexp x)%Z

(0 < F2R {| Fnum := Z.succ mx; Fexp := ?e |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx, ex:Z
lx:SpecFloatCopy.location
Px:x <> 0%R
Bx:(F2R {| Fnum := mx; Fexp := ex |} <= Rabs x < F2R {| Fnum := mx + 1; Fexp := ex |})%R
Ex:(ex <= cexp radix2 fexp x)%Z

(0 <= Rabs x)%R
apply Rabs_pos. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mode0 : mode) (x : R) (mx : positive) (ex : Z) (lx : SpecFloatCopy.location), inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx -> (ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z -> let z := binary_round_aux mode0 (Rlt_bool x 0) (Z.pos mx) ex lx in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode mode0) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode mode0) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow mode0 (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mode0 : mode) (x : R) (mx : positive) (ex : Z) (lx : SpecFloatCopy.location), inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx -> (ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z -> let z := binary_round_aux mode0 (Rlt_bool x 0) (Z.pos mx) ex lx in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode mode0) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode mode0) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow mode0 (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
z:=binary_round_aux m (Rlt_bool x 0) (Z.pos mx) ex lx:full_float

valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
z:=let '(mrs', e') := shr_fexp (Z.pos mx) ex lx in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end:full_float

valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

let z := let '(mrs', e') := shr_fexp (Z.pos mx) ex lx in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

let z := let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 <= Z.pos mx)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

let z := let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool x 0 else z = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

round radix2 fexp (round_mode m) x = (let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m' l'); Fexp := e' |}) -> valid_binary (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

(let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in inbetween_float radix2 m' e' (Rabs x) l' /\ e' = cexp radix2 fexp (Rabs x)) -> round radix2 fexp (round_mode m) x = (let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m' l'); Fexp := e' |}) -> valid_binary (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs', e') := let '(m', e', l') := truncate radix2 fexp (Z.pos mx, ex, lx) in (shr_record_of_loc m' l', e') in let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m mrs') (loc_of_shr_record mrs')) e' SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location

inbetween_float radix2 m1 e1 (Rabs x) l1 /\ e1 = cexp radix2 fexp (Rabs x) -> round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m1 l1); Fexp := e1 |} -> valid_binary (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) (shr_m (shr_record_of_loc m1 l1)) (loc_of_shr_record (shr_record_of_loc m1 l1))) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location

inbetween_float radix2 m1 e1 (Rabs x) l1 /\ e1 = cexp radix2 fexp (Rabs x) -> round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m1 l1); Fexp := e1 |} -> valid_binary (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (choice_mode m (Rlt_bool x 0) m1 l1) e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z

inbetween_float radix2 m1 e1 (Rabs x) l1 /\ e1 = cexp radix2 fexp (Rabs x) -> round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} -> valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = round radix2 fexp (round_mode m) x /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

(m1 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}

(m1 <= match m with | mode_NE => if round_N (negb (Z.even m1)) l1 then m1 + 1 else m1 | mode_ZR => m1 | mode_DN => if round_sign_DN (Rlt_bool x 0) l1 then m1 + 1 else m1 | mode_UP => if round_sign_UP (Rlt_bool x 0) l1 then m1 + 1 else m1 | mode_NA => if round_N true l1 then m1 + 1 else m1 end)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.abs m1'; Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'); Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1') = Z.abs m1'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Rabs (round radix2 fexp (round_mode m) x) = Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1') = Z.abs m1'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

Z.abs (SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1') = Z.abs m1'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 <= m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 <= m1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 < Z.succ m1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(0 < F2R {| Fnum := Z.succ m1; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z

(Rabs x < F2R {| Fnum := Z.succ m1; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}

inbetween_float radix2 m1' e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
Br:inbetween_float radix2 m1' e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':=choice_mode m (Rlt_bool x 0) m1 l1:Z
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |}
Hm:(m1 <= m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := m1'; Fexp := e1 |}
Br:inbetween_float radix2 m1' e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) m1'; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp m1' e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp 0 e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* . m1' = 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
(0 <= 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(let '(m', _, _) := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in m' = 0%Z) -> valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (0%Z, e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location

m2 = 0%Z -> valid_binary match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location

m2 = 0%Z -> valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

valid_binary (F754_zero (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0 else F754_zero (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0 else F754_zero (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z
(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z
(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |} = FF2R radix2 (F754_zero (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z
(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

(Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) 0; Fexp := e1 |}
Hm:(m1 <= 0)%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := 0; Fexp := e1 |}
Br:inbetween_float radix2 0 e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
m2, e2:Z
l2:SpecFloatCopy.location
Hm2:m2 = 0%Z

(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* . 0 < m1' *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(e1 <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
Z.pos m1' <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(e1 <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(cexp radix2 fexp (Rabs x) <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(cexp radix2 fexp x <= fexp (mag radix2 (round radix2 fexp (round_mode m) x)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(cexp radix2 fexp x <= cexp radix2 fexp (round radix2 fexp (round_mode m) x))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

round radix2 fexp (round_mode m) x <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos m1'); Fexp := e1 |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos m1'); Fexp := e1 |} > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
(0 < Rabs (round radix2 fexp (round_mode m) x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
Z.pos m1' <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.pos m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
(0 <= Z.pos m1')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

(let '(m', e', _) := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m'; Fexp := e' |} /\ e' = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})) -> (let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in inbetween_float radix2 m' e' (Rabs (round radix2 fexp (round_mode m) x)) l' /\ e' = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))) -> valid_binary (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := let '(m', e', l') := truncate radix2 fexp (Z.pos m1', e1, SpecFloatCopy.loc_Exact) in (shr_record_of_loc m' l', e') in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2, e2:Z
l2:SpecFloatCopy.location

F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m2; Fexp := e2 |} /\ e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |}) -> inbetween_float radix2 m2 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2 /\ e2 = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x)) -> valid_binary match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match shr_m (shr_record_of_loc m2 l2) with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2, e2:Z
l2:SpecFloatCopy.location

F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m2; Fexp := e2 |} /\ e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |}) -> inbetween_float radix2 m2 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2 /\ e2 = cexp radix2 fexp (Rabs (round radix2 fexp (round_mode m) x)) -> valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2, e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 m2 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = true /\ sign_FF match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = Rlt_bool x 0 else match m2 with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e2 else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := 0; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 0 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (F754_zero (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_zero (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_zero (Rlt_bool x 0)) = true /\ sign_FF (F754_zero (Rlt_bool x 0)) = Rlt_bool x 0 else F754_zero (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := 0; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 0 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.pos m1'; Fexp := e1 |} > F2R {| Fnum := 0; Fexp := e2 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := 0; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 0 e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.pos m1'; Fexp := e1 |} > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else (if (e2 <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m2 e2 else binary_overflow m (Rlt_bool x 0)) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

bounded m2 e2 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

canonical_mantissa m2 e2 = true /\ (e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

canonical_mantissa m2 e2 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

Zeq_bool (fexp (Z.pos (SpecFloatCopy.digits2_pos m2) + e2)) e2 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

fexp (Z.pos (SpecFloatCopy.digits2_pos m2) + e2) = e2
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

fexp (Zdigits radix2 (Z.pos m2) + e2) = e2
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

fexp (mag radix2 (F2R {| Fnum := Z.pos m2; Fexp := e2 |})) = e2
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
Z.pos m2 <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

e2 = fexp (mag radix2 (F2R {| Fnum := Z.pos m2; Fexp := e2 |}))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
Z.pos m2 <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

Z.pos m2 <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true

(e2 <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

valid_binary (F754_finite (Rlt_bool x 0) m2 e2) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0 else F754_finite (Rlt_bool x 0) m2 e2 = binary_overflow m (Rlt_bool x 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (F754_finite (Rlt_bool x 0) m2 e2) = true /\ sign_FF (F754_finite (Rlt_bool x 0) m2 e2) = Rlt_bool x 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

FF2R radix2 (F754_finite (Rlt_bool x 0) m2 e2) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true
(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = true
H:bounded m2 e2 = true

(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ (if Rlt_bool (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |})) (bpow radix2 emax) then FF2R radix2 (binary_overflow m (Rlt_bool x 0)) = cond_Ropp (Rlt_bool x 0) (F2R {| Fnum := Z.pos m2; Fexp := e2 |}) /\ is_finite_FF (binary_overflow m (Rlt_bool x 0)) = true /\ sign_FF (binary_overflow m (Rlt_bool x 0)) = Rlt_bool x 0 else binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (binary_overflow m (Rlt_bool x 0)) = true /\ binary_overflow m (Rlt_bool x 0) = binary_overflow m (Rlt_bool x 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (binary_overflow m (Rlt_bool x 0)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (if overflow_to_inf m (Rlt_bool x 0) then F754_infinity (Rlt_bool x 0) else F754_finite (Rlt_bool x 0) match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (F754_infinity (Rlt_bool x 0)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
valid_binary (F754_finite (Rlt_bool x 0) match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

valid_binary (F754_finite (Rlt_bool x 0) match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(canonical_mantissa match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec) && (emax - prec <=? emax - prec)%Z)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(canonical_mantissa match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec) && true)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

canonical_mantissa match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end (emax - prec) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

fexp (Z.pos (SpecFloatCopy.digits2_pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end) + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

fexp (Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end) + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

fexp (prec + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

Z.max (prec + (emax - prec) - prec) (3 - emax - prec) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(0 < prec)%Z -> Z.max (prec + (emax - prec) - prec) (3 - emax - prec) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

prec = Zdigits radix2 (Z.pos match (2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

prec = Zdigits radix2 (Z.pos match (radix2 ^ prec - 1)%Z with | Z.pos p => p | _ => 1 end)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(radix2 ^ prec - 1)%Z = 0%Z -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(radix2 ^ prec - 1)%Z = 0%Z -> prec = 1%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(1 < radix2 ^ prec)%Z -> (radix2 ^ prec - 1)%Z = 0%Z -> prec = 1%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

forall p : positive, (radix2 ^ prec - 1)%Z = Z.pos p -> prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

prec = Zdigits radix2 (Z.pos p)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec <= Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec - 1 < Zdigits radix2 (Z.pos p))%Z -> (prec <= Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(prec - 1 < Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec - 1 < Zdigits radix2 (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) <= Z.abs (Z.pos p))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) <= Z.pos p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) <= radix2 ^ prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) < radix2 ^ prec)%Z -> (radix2 ^ (prec - 1) <= radix2 ^ prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(radix2 ^ (prec - 1) < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ (prec - 1) < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(IZR (radix2 ^ (prec - 1)) < IZR (radix2 ^ prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(bpow radix2 (prec - 1) < bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(bpow radix2 (prec - 1) < bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(prec - 1 < prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(0 <= prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p
(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(Zdigits radix2 (Z.pos p) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(Z.abs (Z.pos p) < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(Z.pos p < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.pos p

(radix2 ^ prec - 1 < radix2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

forall p : positive, (radix2 ^ prec - 1)%Z = Z.neg p -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.neg p

prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
p:positive
Hp:(radix2 ^ prec - 1)%Z = Z.neg p

(1 < radix2 ^ prec)%Z -> prec = Zdigits radix2 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

(bpow radix2 emax <= F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false

~ (F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = bounded m2 e2 -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = (canonical_mantissa m2 e2 && (e2 <=? emax - prec)%Z)%bool -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = (canonical_mantissa m2 e2 && false)%bool -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

bounded m2 e2 = false -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

true = false -> False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R
canonical radix2 fexp {| Fnum := Z.pos m2; Fexp := e2 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

canonical radix2 fexp {| Fnum := Z.pos m2; Fexp := e2 |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.pos m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.pos m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
He2:(e2 <=? emax - prec)%Z = false
Hx:(F2R (Fabs {| Fnum := Z.pos m2; Fexp := e2 |}) < bpow radix2 emax)%R

Fexp {| Fnum := Z.pos m2; Fexp := e2 |} = cexp radix2 fexp (F2R {| Fnum := Z.pos m2; Fexp := e2 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

valid_binary (F754_nan false 1) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (F754_nan false 1) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |} /\ is_finite_FF (F754_nan false 1) = true /\ sign_FF (F754_nan false 1) = Rlt_bool x 0 else F754_nan false 1 = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.pos m1'; Fexp := e1 |} > F2R {| Fnum := Z.neg m2; Fexp := e2 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(F2R {| Fnum := Z.neg m2; Fexp := e2 |} < R0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2
(R0 < F2R {| Fnum := Z.pos m1'; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
m2:positive
e2:Z
l2:SpecFloatCopy.location
H3:F2R {| Fnum := Z.pos m1'; Fexp := e1 |} = F2R {| Fnum := Z.neg m2; Fexp := e2 |}
H4:e2 = cexp radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
H2:inbetween_float radix2 (Z.neg m2) e2 (Rabs (round radix2 fexp (round_mode m) x)) l2

(R0 < F2R {| Fnum := Z.pos m1'; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z
generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

generic_format radix2 fexp (F2R {| Fnum := Z.pos m1'; Fexp := e1 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

generic_format radix2 fexp (Rabs (round radix2 fexp (round_mode m) x))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.pos m1'); Fexp := e1 |}
Hm:(m1 <= Z.pos m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.pos m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.pos m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
He:(e1 <= fexp (Zdigits radix2 (Z.pos m1') + e1))%Z

generic_format radix2 fexp (round radix2 fexp (round_mode m) x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

valid_binary (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ (if Rlt_bool (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |})) (bpow radix2 emax) then FF2R radix2 (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |} /\ is_finite_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = true /\ sign_FF (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = Rlt_bool x 0 else (let '(mrs'', e'') := shr_fexp (Z.neg m1') e1 SpecFloatCopy.loc_Exact in match shr_m mrs'' with | 0%Z => F754_zero (Rlt_bool x 0) | Z.pos m0 => if (e'' <=? emax - prec)%Z then F754_finite (Rlt_bool x 0) m0 e'' else binary_overflow m (Rlt_bool x 0) | Z.neg _ => F754_nan false 1 end) = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* . not m1' < 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(Rabs (round radix2 fexp (round_mode m) x) > F2R {| Fnum := Z.neg m1'; Fexp := e1 |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(F2R {| Fnum := Z.neg m1'; Fexp := e1 |} < R0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact
(R0 <= Rabs (round radix2 fexp (round_mode m) x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
m1, e1:Z
l1:SpecFloatCopy.location
m1':positive
H1a:inbetween_float radix2 m1 e1 (Rabs x) l1
H1b:e1 = cexp radix2 fexp (Rabs x)
H1c:round radix2 fexp (round_mode m) x = F2R {| Fnum := SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (Z.neg m1'); Fexp := e1 |}
Hm:(m1 <= Z.neg m1')%Z
Hr:Rabs (round radix2 fexp (round_mode m) x) = F2R {| Fnum := Z.neg m1'; Fexp := e1 |}
Br:inbetween_float radix2 (Z.neg m1') e1 (Rabs (round radix2 fexp (round_mode m) x)) SpecFloatCopy.loc_Exact

(R0 <= Rabs (round radix2 fexp (round_mode m) x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

(0 < Rabs x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
x:R
mx:positive
ex:Z
lx:SpecFloatCopy.location
Bx:inbetween_float radix2 (Z.pos mx) ex (Rabs x) lx
Ex:(ex <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

forall (x0 : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x0) l -> round_mode m x0 = SpecFloatCopy.cond_Zopp (Rlt_bool x0 0) (choice_mode m (Rlt_bool x0 0) m0 l)
(* all the modes are valid *)
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode m x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode m (Rlt_bool x 0) m0 l)
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NE x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NE (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_ZR x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_ZR (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_DN x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_DN (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_ZR x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_ZR (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_DN x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_DN (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_DN x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_DN (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_UP x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_UP (Rlt_bool x 0) m0 l)
m:mode
forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
m:mode

forall (x : R) (m0 : Z) (l : SpecFloatCopy.location), inbetween_int m0 (Rabs x) l -> round_mode mode_NA x = SpecFloatCopy.cond_Zopp (Rlt_bool x 0) (choice_mode mode_NA (Rlt_bool x 0) m0 l)
exact inbetween_int_NA_sign. Qed.
Multiplication
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (sx : bool) (mx : positive) (ex : Z), bounded mx ex = true -> forall (sy : bool) (my : positive) (ey : Z), bounded my ey = true -> let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let y := F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in let z := binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (x * y))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (x * y) /\ is_finite_FF z = true /\ sign_FF z = xorb sx sy else z = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (sx : bool) (mx : positive) (ex : Z), bounded mx ex = true -> forall (sy : bool) (my : positive) (ey : Z), bounded my ey = true -> let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let y := F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in let z := binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (x * y))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (x * y) /\ is_finite_FF z = true /\ sign_FF z = xorb sx sy else z = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

let z := binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (x * y))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (x * y) /\ is_finite_FF z = true /\ sign_FF z = xorb sx sy else z = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy else binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R (Fmult {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R (Fmult {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) /\ is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy else binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) /\ is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy else binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

valid_binary (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) /\ is_finite_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 else binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

inbetween_float radix2 (Z.pos (mx * my)) (ex + ey) (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |})) SpecFloatCopy.loc_Exact
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
(ex + ey <= fexp (Zdigits radix2 (Z.pos (mx * my)) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) = F2R {| Fnum := Z.pos (mx * my); Fexp := ex + ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
(ex + ey <= fexp (Zdigits radix2 (Z.pos (mx * my)) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

F2R (Fabs {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) = F2R {| Fnum := Z.pos (mx * my); Fexp := ex + ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
(ex + ey <= fexp (Zdigits radix2 (Z.pos (mx * my)) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

Z.abs (SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my)) = Z.pos (mx * my)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
(ex + ey <= fexp (Zdigits radix2 (Z.pos (mx * my)) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

(Z.abs (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * Z.abs (SpecFloatCopy.cond_Zopp sy (Z.pos my)))%Z = Z.pos (mx * my)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
(ex + ey <= fexp (Zdigits radix2 (Z.pos (mx * my)) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

(ex + ey <= fexp (Zdigits radix2 (Z.pos (mx * my)) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

(ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
H:forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e
(ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : positive) (e : Z), bounded m e = true -> fexp (Zdigits radix2 (Z.pos m) + e) = e
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
H:forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e
(ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:positive
e:Z
Hb:bounded m e = true

fexp (Zdigits radix2 (Z.pos m) + e) = e
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
H:forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e
(ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:positive
e:Z
Hb:bounded m e = true
H:canonical_mantissa m e = true

fexp (Zdigits radix2 (Z.pos m) + e) = e
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
H:forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e
(ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:positive
e:Z
Hb:bounded m e = true
H:canonical_mantissa m e = true

Zeq_bool (fexp (Zdigits radix2 (Z.pos m) + e)) e = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
H:forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e
(ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
H:forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e

(ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
H:forall (m0 : positive) (e : Z), bounded m0 e = true -> fexp (Zdigits radix2 (Z.pos m0) + e) = e

fexp (Zdigits radix2 (Z.pos mx) + ex) = ex -> fexp (Zdigits radix2 (Z.pos my) + ey) = ey -> (ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z

fexp (Zdigits radix2 (Z.pos mx) + ex) = ex -> fexp (Zdigits radix2 (Z.pos my) + ey) = ey -> (ex + ey <= fexp (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey)))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z

Z.max (Zdigits radix2 (Z.pos mx) + ex - prec) emin = ex -> Z.max (Zdigits radix2 (Z.pos my) + ey - prec) emin = ey -> (ex + ey <= Z.max (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey) - prec) emin)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z

(Zdigits radix2 (Z.pos mx) + Zdigits radix2 (Z.pos my) - 1 <= Zdigits radix2 (Z.pos mx * Z.pos my))%Z -> Z.max (Zdigits radix2 (Z.pos mx) + ex - prec) emin = ex -> Z.max (Zdigits radix2 (Z.pos my) + ey - prec) emin = ey -> (ex + ey <= Z.max (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey) - prec) emin)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z

(0 < Zdigits radix2 (Z.pos mx))%Z -> (0 < Zdigits radix2 (Z.pos my))%Z -> (Zdigits radix2 (Z.pos mx) + Zdigits radix2 (Z.pos my) - 1 <= Zdigits radix2 (Z.pos mx * Z.pos my))%Z -> Z.max (Zdigits radix2 (Z.pos mx) + ex - prec) emin = ex -> Z.max (Zdigits radix2 (Z.pos my) + ey - prec) emin = ey -> (ex + ey <= Z.max (Zdigits radix2 (Z.pos mx * Z.pos my) + (ex + ey) - prec) emin)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z

forall z z0 z1 : Z, (0 < z)%Z -> (0 < z0)%Z -> (z + z0 - 1 <= z1)%Z -> Z.max (z + ex - prec) emin = ex -> Z.max (z0 + ey - prec) emin = ey -> (ex + ey <= Z.max (z1 + (ex + ey) - prec) emin)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
ex, ey:Z

forall z z0 z1 : Z, (0 < z)%Z -> (0 < z0)%Z -> (z + z0 - 1 <= z1)%Z -> Z.max (z + ex - prec) emin = ex -> Z.max (z0 + ey - prec) emin = ey -> (ex + ey <= Z.max (z1 + (ex + ey) - prec) emin)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
ex, ey:Z

forall z z0 z1 : Z, (0 < z)%Z -> (0 < z0)%Z -> (z + z0 - 1 <= z1)%Z -> Z.max (z + ex - prec) (3 - emax - prec) = ex -> Z.max (z0 + ey - prec) (3 - emax - prec) = ey -> (ex + ey <= Z.max (z1 + (ex + ey) - prec) (3 - emax - prec))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
ex, ey, dx, dy, dxy:Z
Hx:(0 < dx)%Z
Hy:(0 < dy)%Z
Hxy:(dx + dy - 1 <= dxy)%Z

Z.max (dx + ex - prec) (3 - emax - prec) = ex -> Z.max (dy + ey - prec) (3 - emax - prec) = ey -> (ex + ey <= Z.max (dxy + (ex + ey) - prec) (3 - emax - prec))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
Hmax:(prec < emax)%Z
ex, ey, dx, dy, dxy:Z
Hx:(0 < dx)%Z
Hy:(0 < dy)%Z
Hxy:(dx + dy - 1 <= dxy)%Z
H:(dx + ex - prec < 3 - emax - prec)%Z /\ ex = (3 - emax - prec)%Z \/ (3 - emax - prec <= dx + ex - prec)%Z /\ ex = (dx + ex - prec)%Z
H0:(dy + ey - prec < 3 - emax - prec)%Z /\ ey = (3 - emax - prec)%Z \/ (3 - emax - prec <= dy + ey - prec)%Z /\ ey = (dy + ey - prec)%Z
z5:Z
H1:(dxy + (ex + ey) - prec < 3 - emax - prec)%Z /\ z5 = (3 - emax - prec)%Z \/ (3 - emax - prec <= dxy + (ex + ey) - prec)%Z /\ z5 = (dxy + (ex + ey) - prec)%Z

(ex + ey <= z5)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx) * SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ex + ey |}) 0 = xorb sx sy
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |}) 0 = xorb true true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb true false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |}) 0 = xorb false true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb true false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |}) 0 = xorb false true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb true false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |}) 0 = xorb false true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |}) 0 = xorb false true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |}) 0 = xorb false true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ex + ey |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
y:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:R

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx) * SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ex + ey |})%R
now apply F2R_ge_0. Qed. Definition Bmult mult_nan m x y := match x, y with | B754_nan _ _ _, _ | _, B754_nan _ _ _ => build_nan (mult_nan x y) | B754_infinity sx, B754_infinity sy => B754_infinity (xorb sx sy) | B754_infinity sx, B754_finite sy _ _ _ => B754_infinity (xorb sx sy) | B754_finite sx _ _ _, B754_infinity sy => B754_infinity (xorb sx sy) | B754_infinity _, B754_zero _ => build_nan (mult_nan x y) | B754_zero _, B754_infinity _ => build_nan (mult_nan x y) | B754_finite sx _ _ _, B754_zero sy => B754_zero (xorb sx sy) | B754_zero sx, B754_finite sy _ _ _ => B754_zero (xorb sx sy) | B754_zero sx, B754_zero sy => B754_zero (xorb sx sy) | B754_finite sx mx ex Hx, B754_finite sy my ey Hy => FF2B _ (proj1 (Bmult_correct_aux m sx mx ex Hx sy my ey Hy)) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mult_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x * B2R y))) (bpow radix2 emax) then B2R (Bmult mult_nan m x y) = round radix2 fexp (round_mode m) (B2R x * B2R y) /\ is_finite (Bmult mult_nan m x y) = (is_finite x && is_finite y)%bool /\ (is_nan (Bmult mult_nan m x y) = false -> Bsign (Bmult mult_nan m x y) = xorb (Bsign x) (Bsign y)) else B2FF (Bmult mult_nan m x y) = binary_overflow m (xorb (Bsign x) (Bsign y))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mult_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x * B2R y))) (bpow radix2 emax) then B2R (Bmult mult_nan m x y) = round radix2 fexp (round_mode m) (B2R x * B2R y) /\ is_finite (Bmult mult_nan m x y) = (is_finite x && is_finite y)%bool /\ (is_nan (Bmult mult_nan m x y) = false -> Bsign (Bmult mult_nan m x y) = xorb (Bsign x) (Bsign y)) else B2FF (Bmult mult_nan m x y) = binary_overflow m (xorb (Bsign x) (Bsign y))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) * B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bmult mult_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) * B2R (B754_finite sy my ey Hy)) /\ is_finite (Bmult mult_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = (is_finite (B754_finite sx mx ex Hx) && is_finite (B754_finite sy my ey Hy))%bool /\ (is_nan (Bmult mult_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = false -> Bsign (Bmult mult_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = xorb (Bsign (B754_finite sx mx ex Hx)) (Bsign (B754_finite sy my ey Hy))) else B2FF (Bmult mult_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (xorb (Bsign (B754_finite sx mx ex Hx)) (Bsign (B754_finite sy my ey Hy)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (Bmult_correct_aux m sx mx ex Hx sy my ey Hy))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (Bmult_correct_aux m sx mx ex Hx sy my ey Hy))) = true /\ (is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (Bmult_correct_aux m sx mx ex Hx sy my ey Hy))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (Bmult_correct_aux m sx mx ex Hx sy my ey Hy))) = xorb sx sy) else B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (Bmult_correct_aux m sx mx ex Hx sy my ey Hy))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

forall (e : valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true) (y : if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy else binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy)), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj e y))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj e y))) = true /\ (is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj e y))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj e y))) = xorb sx sy) else B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj e y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true

forall y : if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy else binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = true /\ (is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = xorb sx sy) else B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true

forall y : FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy, B2R (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = true /\ (is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy

B2R (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy

B2R (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy
is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy

is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy

is_finite (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy
is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy

is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:FF2R radix2 (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H4:sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy

is_nan (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> sign_FF (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true

forall y : binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy), B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mult_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
H1:valid_binary (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) = true
H2:binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact = binary_overflow m (xorb sx sy)

B2FF (FF2B (binary_round_aux m (xorb sx sy) (Z.pos (mx * my)) (ex + ey) SpecFloatCopy.loc_Exact) (proj1 (conj H1 H2))) = binary_overflow m (xorb sx sy)
now rewrite B2FF_FF2B. Qed.
Normalization and rounding
Definition shl_align mx ex ex' :=
  match (ex' - ex)%Z with
  | Zneg d => (shift_pos d mx, ex')
  | _ => (mx, ex)
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex ex' : Z), let (mx', ex'') := shl_align mx ex ex' in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex ex' : Z), let (mx', ex'') := shl_align mx ex ex' in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z

let (mx', ex'') := shl_align mx ex ex' in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z

let (mx', ex'') := match (ex' - ex)%Z with | Z.neg d => (shift_pos d mx, ex') | _ => (mx, ex) end in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z

(ex' - ex)%Z = 0%Z -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.pos p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
(* d = 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
H:(ex' - ex)%Z = 0%Z

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.pos p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
H:(ex' - ex)%Z = 0%Z

(ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.pos p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
H:(ex' - ex)%Z = 0%Z

(ex <= ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.pos p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z

forall p : positive, (ex' - ex)%Z = Z.pos p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
(* d > 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.pos d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx; Fexp := ex |} /\ (ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.pos d

(ex <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.pos d

(ex <= ex' - ex + ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.pos d

(ex <= Z.pos d + ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.pos d

(0 + ex <= Z.pos d + ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z

forall p : positive, (ex' - ex)%Z = Z.neg p -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos p mx); Fexp := ex' |} /\ (ex' <= ex')%Z
(* d < 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos (shift_pos d mx); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx * Z.pow_pos 2 d; Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx * radix2 ^ Z.pos d; Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx * radix2 ^ (- Z.neg d); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx * radix2 ^ (- (ex' - ex)); Fexp := ex' |} /\ (ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx * radix2 ^ (- (ex' - ex)); Fexp := ex' |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d
(ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx * radix2 ^ (ex - ex'); Fexp := ex' |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d
(ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

(ex' <= ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d
(ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

(0 <= ex - ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d
(ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

(0 <= - (ex' - ex))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d
(ex' <= ex')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
d:positive
Hd:(ex' - ex)%Z = Z.neg d

(ex' <= ex')%Z
apply Z.le_refl. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex ex' : Z), (ex' <= ex)%Z -> snd (shl_align mx ex ex') = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex ex' : Z), (ex' <= ex)%Z -> snd (shl_align mx ex ex') = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z

snd (shl_align mx ex ex') = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z

snd match (ex' - ex)%Z with | Z.neg d => (shift_pos d mx, ex') | _ => (mx, ex) end = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z

(ex' - ex)%Z = 0%Z -> ex = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
forall p : positive, (ex' - ex)%Z = Z.pos p -> ex = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> ex' = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
H:(ex' - ex)%Z = 0%Z

ex = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
forall p : positive, (ex' - ex)%Z = Z.pos p -> ex = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> ex' = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z

forall p : positive, (ex' - ex)%Z = Z.pos p -> ex = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> ex' = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
p:positive

(ex' - ex)%Z = Z.pos p -> ex = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
forall p : positive, (ex' - ex)%Z = Z.neg p -> ex' = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z

forall p : positive, (ex' - ex)%Z = Z.neg p -> ex' = ex'
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex, ex':Z
He:(ex' <= ex)%Z
p:positive
H:(ex' - ex)%Z = Z.neg p

ex' = ex'
apply refl_equal. Qed. Definition shl_align_fexp mx ex := shl_align mx ex (fexp (Zpos (digits2_pos mx) + ex)).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), let (mx', ex') := shl_align_fexp mx ex in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (mx : positive) (ex : Z), let (mx', ex') := shl_align_fexp mx ex in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z

let (mx', ex') := shl_align_fexp mx ex in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z

let (mx', ex') := shl_align mx ex (fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)) in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z

(let (mx', ex'') := shl_align mx ex (fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)) in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex))%Z) -> let (mx', ex') := shl_align mx ex (fexp (Z.pos (SpecFloatCopy.digits2_pos mx) + ex)) in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z

(let (mx', ex'') := shl_align mx ex (fexp (Zdigits radix2 (Z.pos mx) + ex)) in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z) -> let (mx', ex') := shl_align mx ex (fexp (Zdigits radix2 (Z.pos mx) + ex)) in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z

forall (p : positive) (z : Z), F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos p; Fexp := z |} /\ (z <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos p; Fexp := z |} /\ (z <= fexp (Zdigits radix2 (Z.pos p) + z))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
(ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

(ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

(ex' <= fexp (mag radix2 (F2R {| Fnum := Z.pos mx'; Fexp := ex' |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z
Z.pos mx' <> 0%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

(ex' <= fexp (mag radix2 (F2R {| Fnum := Z.pos mx'; Fexp := ex' |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
mx:positive
ex:Z
mx':positive
ex':Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |}
H2:(ex' <= fexp (Zdigits radix2 (Z.pos mx) + ex))%Z

(ex' <= fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
now rewrite mag_F2R_Zdigits. Qed. Definition binary_round m sx mx ex := let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Zpos mz) ez loc_Exact.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (sx : bool) (mx : positive) (ex : Z), let z := binary_round m sx mx ex in valid_binary z = true /\ (let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = sx else z = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (sx : bool) (mx : positive) (ex : Z), let z := binary_round m sx mx ex in valid_binary z = true /\ (let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = sx else z = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z

let z := binary_round m sx mx ex in valid_binary z = true /\ (let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = sx else z = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z

valid_binary (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) /\ is_finite_FF (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ sign_FF (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = sx else (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z

(let (mx', ex') := shl_align_fexp mx ex in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= fexp (Zdigits radix2 (Z.pos mx') + ex'))%Z) -> valid_binary (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) /\ is_finite_FF (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ sign_FF (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = sx else (let '(mz, ez) := shl_align_fexp mx ex in binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z

F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |} /\ (ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z -> valid_binary (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) /\ is_finite_FF (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = sx else binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z

valid_binary (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) /\ is_finite_FF (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = sx else binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

valid_binary (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) x /\ is_finite_FF (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact) = sx else binary_round_aux m sx (Z.pos mz) ez SpecFloatCopy.loc_Exact = binary_overflow m sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

valid_binary (binary_round_aux m (Rlt_bool x 0) (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (Rlt_bool x 0) (Z.pos mz) ez SpecFloatCopy.loc_Exact) = round radix2 fexp (round_mode m) x /\ is_finite_FF (binary_round_aux m (Rlt_bool x 0) (Z.pos mz) ez SpecFloatCopy.loc_Exact) = true /\ sign_FF (binary_round_aux m (Rlt_bool x 0) (Z.pos mz) ez SpecFloatCopy.loc_Exact) = Rlt_bool x 0 else binary_round_aux m (Rlt_bool x 0) (Z.pos mz) ez SpecFloatCopy.loc_Exact = binary_overflow m (Rlt_bool x 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
Rlt_bool x 0 = sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

inbetween_float radix2 (Z.pos mz) ez (Rabs x) SpecFloatCopy.loc_Exact
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
Rlt_bool x 0 = sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

Rabs x = F2R {| Fnum := Z.pos mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
Rlt_bool x 0 = sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) = F2R {| Fnum := Z.pos mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
Rlt_bool x 0 = sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
Rlt_bool x 0 = sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

Rlt_bool x 0 = sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) 0 = sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
mz:positive
ez:Z
H1:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mz; Fexp := ez |}
H2:(ez <= fexp (Zdigits radix2 (Z.pos mz) + ez))%Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})%R
now apply F2R_ge_0. Qed. Definition binary_normalize mode m e szero := match m with | Z0 => B754_zero szero | Zpos m => FF2B _ (proj1 (binary_round_correct mode false m e)) | Zneg m => FF2B _ (proj1 (binary_round_correct mode true m e)) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (mx ex : Z) (szero : bool), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mx; Fexp := ex |}))) (bpow radix2 emax) then B2R (binary_normalize m mx ex szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mx; Fexp := ex |}) /\ is_finite (binary_normalize m mx ex szero) = true /\ Bsign (binary_normalize m mx ex szero) = match Rcompare (F2R {| Fnum := mx; Fexp := ex |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (binary_normalize m mx ex szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mx; Fexp := ex |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (mx ex : Z) (szero : bool), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mx; Fexp := ex |}))) (bpow radix2 emax) then B2R (binary_normalize m mx ex szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mx; Fexp := ex |}) /\ is_finite (binary_normalize m mx ex szero) = true /\ Bsign (binary_normalize m mx ex szero) = match Rcompare (F2R {| Fnum := mx; Fexp := ex |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (binary_normalize m mx ex szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mx; Fexp := ex |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx, ez:Z
szero:bool

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mx; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mx ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mx; Fexp := ez |}) /\ is_finite (binary_normalize m mx ez szero) = true /\ Bsign (binary_normalize m mx ez szero) = match Rcompare (F2R {| Fnum := mx; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (binary_normalize m mx ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mx; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := 0; Fexp := ez |}))) (bpow radix2 emax) then 0%R = round radix2 fexp (round_mode m) (F2R {| Fnum := 0; Fexp := ez |}) /\ true = true /\ szero = match Rcompare (F2R {| Fnum := 0; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else F754_zero szero = binary_overflow m (Rlt_bool (F2R {| Fnum := 0; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool

0%R = 0%R /\ true = true /\ szero = match Rcompare 0 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool
(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool

true = true /\ szero = match Rcompare 0 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool
(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool

szero = match Rcompare 0 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool
(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
ez:Z
szero:bool

(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 (binary_round_correct m false mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
(* . mz > 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

forall a : let z := binary_round m false mz ez in valid_binary z = true /\ (let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = false else z = binary_overflow m false), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 a)) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 a)) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 a)) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

forall a : valid_binary (binary_round m false mz ez) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite_FF (binary_round m false mz ez) = true /\ sign_FF (binary_round m false mz ez) = false else binary_round m false mz ez = binary_overflow m false), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m false mz ez) (proj1 a)) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 a)) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 a)) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})) < bpow radix2 emax)%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite_FF (binary_round m false mz ez) = true /\ sign_FF (binary_round m false mz ez) = false, B2R (FF2B (binary_round m false mz ez) (proj1 a)) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 a)) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 a)) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

B2R (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

B2R (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false
is_finite (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

is_finite (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true /\ Bsign (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

is_finite (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false
Bsign (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

Bsign (FF2B (binary_round m false mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

false = match Rcompare (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

(0 < F2R {| Fnum := Z.pos mz; Fexp := ez |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

(0 < Fnum {| Fnum := Z.pos mz; Fexp := ez |})%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m false mz ez) = true
Rz:FF2R radix2 (binary_round m false mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m false mz ez) = true
Rz'':sign_FF (binary_round m false mz ez) = false

(0 < Z.pos mz)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m false mz ez) = true /\ binary_round m false mz ez = binary_overflow m false, B2FF (FF2B (binary_round m false mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m false mz ez) = true
Rz:binary_round m false mz ez = binary_overflow m false

B2FF (FF2B (binary_round m false mz ez) (proj1 (conj Vz Rz))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m false mz ez) = true
Rz:binary_round m false mz ez = binary_overflow m false

binary_overflow m false = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m false mz ez) = true
Rz:binary_round m false mz ez = binary_overflow m false

false = Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m false mz ez) = true
Rz:binary_round m false mz ez = binary_overflow m false

Rlt_bool (F2R {| Fnum := Z.pos mz; Fexp := ez |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.pos mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m false mz ez) = true
Rz:binary_round m false mz ez = binary_overflow m false

(0 <= F2R {| Fnum := Z.pos mz; Fexp := ez |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 (binary_round_correct m true mz ez))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
(* . mz < 0 *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

forall a : let z := binary_round m true mz ez in valid_binary z = true /\ (let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mz); Fexp := ez |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) x /\ is_finite_FF z = true /\ sign_FF z = true else z = binary_overflow m true), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 a)) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 a)) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 a)) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

forall a : valid_binary (binary_round m true mz ez) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite_FF (binary_round m true mz ez) = true /\ sign_FF (binary_round m true mz ez) = true else binary_round m true mz ez = binary_overflow m true), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (FF2B (binary_round m true mz ez) (proj1 a)) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 a)) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 a)) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})) < bpow radix2 emax)%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite_FF (binary_round m true mz ez) = true /\ sign_FF (binary_round m true mz ez) = true, B2R (FF2B (binary_round m true mz ez) (proj1 a)) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 a)) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 a)) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

B2R (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |}) /\ is_finite (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

B2R (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true
is_finite (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

is_finite (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true /\ Bsign (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

is_finite (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true
Bsign (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

Bsign (FF2B (binary_round m true mz ez) (proj1 (conj Vz (conj Rz (conj Rz' Rz''))))) = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

true = match Rcompare (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

(F2R {| Fnum := Z.neg mz; Fexp := ez |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

(Fnum {| Fnum := Z.neg mz; Fexp := ez |} < 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Vz:valid_binary (binary_round m true mz ez) = true
Rz:FF2R radix2 (binary_round m true mz ez) = round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})
Rz':is_finite_FF (binary_round m true mz ez) = true
Rz'':sign_FF (binary_round m true mz ez) = true

(Z.neg mz < 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool

(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R -> forall a : valid_binary (binary_round m true mz ez) = true /\ binary_round m true mz ez = binary_overflow m true, B2FF (FF2B (binary_round m true mz ez) (proj1 a)) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m true mz ez) = true
Rz:binary_round m true mz ez = binary_overflow m true

B2FF (FF2B (binary_round m true mz ez) (proj1 (conj Vz Rz))) = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m true mz ez) = true
Rz:binary_round m true mz ez = binary_overflow m true

binary_overflow m true = binary_overflow m (Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m true mz ez) = true
Rz:binary_round m true mz ez = binary_overflow m true

true = Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m true mz ez) = true
Rz:binary_round m true mz ez = binary_overflow m true

Rlt_bool (F2R {| Fnum := Z.neg mz; Fexp := ez |}) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mz:positive
ez:Z
szero:bool
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := Z.neg mz; Fexp := ez |})))%R
Vz:valid_binary (binary_round m true mz ez) = true
Rz:binary_round m true mz ez = binary_overflow m true

(F2R {| Fnum := Z.neg mz; Fexp := ez |} < 0)%R
now apply F2R_lt_0. Qed.
Addition
Definition Bplus plus_nan m x y :=
  match x, y with
  | B754_nan _ _ _, _ | _, B754_nan _ _ _ => build_nan (plus_nan x y)
  | B754_infinity sx, B754_infinity sy =>
    if Bool.eqb sx sy then x else build_nan (plus_nan x y)
  | B754_infinity _, _ => x
  | _, B754_infinity _ => y
  | B754_zero sx, B754_zero sy =>
    if Bool.eqb sx sy then x else
    match m with mode_DN => B754_zero true | _ => B754_zero false end
  | B754_zero _, _ => y
  | _, B754_zero _ => x
  | B754_finite sx mx ex Hx, B754_finite sy my ey Hy =>
    let ez := Z.min ex ey in
    binary_normalize m (Zplus (cond_Zopp sx (Zpos (fst (shl_align mx ex ez)))) (cond_Zopp sy (Zpos (fst (shl_align my ey ez)))))
      ez (match m with mode_DN => true | _ => false end)
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (plus_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), is_finite x = true -> is_finite y = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + B2R y))) (bpow radix2 emax) then B2R (Bplus plus_nan m x y) = round radix2 fexp (round_mode m) (B2R x + B2R y) /\ is_finite (Bplus plus_nan m x y) = true /\ Bsign (Bplus plus_nan m x y) = match Rcompare (B2R x + B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign y)%bool | _ => (Bsign x && Bsign y)%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = Bsign y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (plus_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), is_finite x = true -> is_finite y = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + B2R y))) (bpow radix2 emax) then B2R (Bplus plus_nan m x y) = round radix2 fexp (round_mode m) (B2R x + B2R y) /\ is_finite (Bplus plus_nan m x y) = true /\ Bsign (Bplus plus_nan m x y) = match Rcompare (B2R x + B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign y)%bool | _ => (Bsign x && Bsign y)%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = Bsign y
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_zero sx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_zero sy)) = match Rcompare (B2R (B754_zero sx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_zero sx) (B754_zero sy)) = binary_overflow m (Bsign (B754_zero sx)) /\ Bsign (B754_zero sx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_zero sx)) /\ Bsign (B754_zero sx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true

B2R (Bplus plus_nan m (B754_zero sx) (B754_zero sy)) = 0%R /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_zero sy)) = match Rcompare (B2R (B754_zero sx)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true
(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_zero sx)) /\ Bsign (B754_zero sx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true

B2R (if Bool.eqb sx sy then B754_zero sx else match m with | mode_DN => B754_zero true | _ => B754_zero false end) = 0%R /\ is_finite (if Bool.eqb sx sy then B754_zero sx else match m with | mode_DN => B754_zero true | _ => B754_zero false end) = true /\ Bsign (if Bool.eqb sx sy then B754_zero sx else match m with | mode_DN => B754_zero true | _ => B754_zero false end) = match Rcompare 0 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true
(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_zero sx)) /\ Bsign (B754_zero sx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true

B2R (if Bool.eqb sx sy then B754_zero sx else match m with | mode_DN => B754_zero true | _ => B754_zero false end) = 0%R /\ is_finite (if Bool.eqb sx sy then B754_zero sx else match m with | mode_DN => B754_zero true | _ => B754_zero false end) = true /\ Bsign (if Bool.eqb sx sy then B754_zero sx else match m with | mode_DN => B754_zero true | _ => B754_zero false end) = match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true
(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_zero sx)) /\ Bsign (B754_zero sx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_zero sy) = true

(0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_zero sx)) /\ Bsign (B754_zero sx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_zero sx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_zero sx)) /\ Bsign (B754_zero sx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

B2R (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = B2R (B754_finite sy my ey Hy) /\ is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

is_finite (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

Bsign (Bplus plus_nan m (B754_zero sx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_zero sx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_zero sx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

sy = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

sy = match Rcompare (IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) * bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

sy = match Rcompare (IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(0 < bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

sy = match (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} ?= 0)%Z with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(0 < bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

(0 < bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

(Rabs (B2R (B754_finite sy my ey Hy)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_zero sx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

generic_format radix2 fexp (B2R (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_zero sy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_zero sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = B2R (B754_finite sx mx ex Hx) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_zero sy)) = match Rcompare (B2R (B754_finite sx mx ex Hx)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_zero sy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_zero sy))%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

sx = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

sx = match Rcompare (IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) * bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

sx = match Rcompare (IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(0 < bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

sx = match (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} ?= 0)%Z with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(0 < bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

(0 < bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

(Rabs (B2R (B754_finite sx mx ex Hx)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true
generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_zero sy) = true

generic_format radix2 fexp (B2R (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
(* *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) + B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (B754_finite sy my ey Hy))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (B754_finite sy my ey Hy))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (B754_finite sy my ey Hy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = true /\ Bsign (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) szero) = true /\ Bsign (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez)))) ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez)))) ez szero) = true /\ Bsign (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez)))) ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez)))) ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

(cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

(let (mx', ex'') := shl_align mx ex ez in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

(let (mx', ex'') := shl_align my ey ez in F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> (let (mx', ex'') := shl_align mx ex ez in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

snd (shl_align mx ex ez) = ez -> (let (mx', ex'') := shl_align my ey ez in F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> (let (mx', ex'') := shl_align mx ex ez in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

snd (shl_align my ey ez) = ez -> snd (shl_align mx ex ez) = ez -> (let (mx', ex'') := shl_align my ey ez in F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> (let (mx', ex'') := shl_align mx ex ez in F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z

snd (shl_align my ey ez) = ez -> snd (mx', ex') = ez -> (let (mx'0, ex'') := shl_align my ey ez in F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos mx'0; Fexp := ex'' |} /\ (ex'' <= ez)%Z) -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= ez)%Z -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z

snd (my', ey') = ez -> snd (mx', ex') = ez -> F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos my'; Fexp := ey' |} /\ (ey' <= ez)%Z -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= ez)%Z -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z

ey' = ez -> ex' = ez -> F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos my'; Fexp := ey' |} /\ (ey' <= ez)%Z -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= ez)%Z -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z
H1:ey' = ez
H2:ex' = ez

F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos my'; Fexp := ey' |} /\ (ey' <= ez)%Z -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ex' |} /\ (ex' <= ez)%Z -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z
H1:ey' = ez
H2:ex' = ez

F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos my'; Fexp := ez |} /\ (ez <= ez)%Z -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ez |} /\ (ez <= ez)%Z -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z

F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos my'; Fexp := ez |} /\ (ez <= ez)%Z -> F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ez |} /\ (ez <= ez)%Z -> (cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z
H1:F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos my'; Fexp := ez |}
H2:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ez |}

(cond_Ropp sx (F2R {| Fnum := Z.pos mx; Fexp := ex |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my; Fexp := ey |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z
H1:F2R {| Fnum := Z.pos my; Fexp := ey |} = F2R {| Fnum := Z.pos my'; Fexp := ez |}
H2:F2R {| Fnum := Z.pos mx; Fexp := ex |} = F2R {| Fnum := Z.pos mx'; Fexp := ez |}

(cond_Ropp sx (F2R {| Fnum := Z.pos mx'; Fexp := ez |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my'; Fexp := ez |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z

(cond_Ropp sx (F2R {| Fnum := Z.pos mx'; Fexp := ez |}) + cond_Ropp sy (F2R {| Fnum := Z.pos my'; Fexp := ez |}))%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z

(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx'); Fexp := ez |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my'); Fexp := ez |})%R = F2R {| Fnum := mz; Fexp := ez |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z

(IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx'); Fexp := ez |}) * bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx'); Fexp := ez |}) + IZR (Fnum {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my'); Fexp := ez |}) * bpow radix2 (Fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my'); Fexp := ez |}))%R = (IZR (Fnum {| Fnum := mz; Fexp := ez |}) * bpow radix2 (Fexp {| Fnum := mz; Fexp := ez |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mx':positive
ex':Z
my':positive
ey':Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (mx', ex'))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (my', ey'))))%Z:Z

(IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx')) * bpow radix2 ez + IZR (SpecFloatCopy.cond_Zopp sy (Z.pos my')) * bpow radix2 ez)%R = (IZR mz * bpow radix2 ez)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}

(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}

(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R -> sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R

sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
(* .. *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

sy = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} < 0 + 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(0 + 0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy
(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx = sy

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy

sx = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
(* .. *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R -> (F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R -> canonical_mantissa mx ex = true /\ (ex <=? emax - prec)%Z = true -> canonical_mantissa my ey = true /\ (ey <=? emax - prec)%Z = true -> (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Hx':canonical_mantissa mx ex = true
Hy':canonical_mantissa my ey = true

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Bz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%R
Hs:sx <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Hx':canonical_mantissa mx ex = true
Hy':canonical_mantissa my ey = true

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} -> canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} -> (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:sx <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} -> canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} -> (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:sx <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:true <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
(* ... *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Hs:true <> true
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Hs:true <> false
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Hs:true <> false
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} <= round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < - F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} <= round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} <= round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

generic_format radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} <= F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} <= F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + 0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}) <= F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

generic_format radix2 fexp (F2R {| Fnum := Z.pos my; Fexp := ey |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |} <= F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |} <= F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |} <= 0 + F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} <= 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
Hs:false <> sy
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
(* ... *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Hs:false <> true
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Hs:false <> false
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |}
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Hs:false <> true
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(- bpow radix2 emax < - F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

generic_format radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(0 + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}) <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

generic_format radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}
(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= F2R {| Fnum := Z.pos mx; Fexp := ex |} + 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
my:positive
ey:Z
Bx:(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
By:(F2R {| Fnum := Z.pos my; Fexp := ey |} < bpow radix2 emax)%R
Cx:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}
Cy:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |}

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos my); Fexp := ey |} <= 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
(* . *)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy

(if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)) -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}))) (bpow radix2 emax) then B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R -> B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end -> B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end

is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => szero | Lt => true | Gt => false end

Bsign (binary_normalize m mz ez szero) = match Rcompare (F2R {| Fnum := mz; Fexp := ez |}) 0 with | Eq => match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end | Lt => true | Gt => false end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

Bsign (binary_normalize m mz ez szero) = match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = 0%R
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

Bsign (binary_normalize m mz ez szero) = match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = (- F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})%R
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

Bsign (binary_normalize m mz ez szero) = match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

Bsign (binary_normalize m mz ez szero) = match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:{| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

Bsign (binary_normalize m mz ez szero) = match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
canonical radix2 ?fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
canonical radix2 ?fexp {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:{| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
H3:SpecFloatCopy.cond_Zopp sy (Z.pos my) = (- SpecFloatCopy.cond_Zopp sx (Z.pos mx))%Z
H4:ey = ex

Bsign (binary_normalize m mz ez szero) = match m with | mode_DN => (sx || sy)%bool | _ => (sx && sy)%bool end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
canonical radix2 ?fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
canonical radix2 ?fexp {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

canonical radix2 ?fexp {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
canonical radix2 ?fexp {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

canonical_mantissa my ey = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
canonical radix2 fexp {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:canonical_mantissa my ey = true /\ (ey <=? emax - prec)%Z = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

canonical_mantissa my ey = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R
canonical radix2 fexp {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

canonical radix2 fexp {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp (negb sx) (Z.pos mx); Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

canonical_mantissa mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:canonical_mantissa mx ex = true /\ (ex <=? emax - prec)%Z = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} = F2R {| Fnum := - SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
H:(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})) < bpow radix2 emax)%R
H0:B2R (binary_normalize m mz ez szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |}) /\ is_finite (binary_normalize m mz ez szero) = true /\ Bsign (binary_normalize m mz ez szero) = szero
H1:F2R {| Fnum := mz; Fexp := ez |} = 0%R

canonical_mantissa mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy

(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) -> B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R -> sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R
Vz:B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)

B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R
Vz:B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)

B2FF (binary_normalize m mz ez szero) = binary_overflow m sx /\ sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R
Vz:B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)

B2FF (binary_normalize m mz ez szero) = binary_overflow m sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R
Vz:B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)
sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R
Vz:B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)

binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0) = binary_overflow m sx
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R
Vz:B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)
sx = sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
plus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
szero:=match m with | mode_DN => true | _ => false end:bool
ez:=Z.min ex ey:Z
mz:=(SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex ez))) + SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey ez))))%Z:Z
Hp:(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} + F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R = F2R {| Fnum := mz; Fexp := ez |}
Sz:sx = Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0 /\ sx = sy
Hz':(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mz; Fexp := ez |})))%R
Vz:B2FF (binary_normalize m mz ez szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mz; Fexp := ez |}) 0)

sx = sy
apply Sz. Qed.
Subtraction
Definition Bminus minus_nan m x y :=
  match x, y with
  | B754_nan _ _ _, _ | _, B754_nan _ _ _ => build_nan (minus_nan x y)
  | B754_infinity sx, B754_infinity sy =>
    if Bool.eqb sx (negb sy) then x else build_nan (minus_nan x y)
  | B754_infinity _, _ => x
  | _, B754_infinity sy => B754_infinity (negb sy)
  | B754_zero sx, B754_zero sy =>
    if Bool.eqb sx (negb sy) then x else
    match m with mode_DN => B754_zero true | _ => B754_zero false end
  | B754_zero _, B754_finite sy my ey Hy => B754_finite (negb sy) my ey Hy
  | _, B754_zero _ => x
  | B754_finite sx mx ex Hx, B754_finite sy my ey Hy =>
    let ez := Z.min ex ey in
    binary_normalize m (Zminus (cond_Zopp sx (Zpos (fst (shl_align mx ex ez)))) (cond_Zopp sy (Zpos (fst (shl_align my ey ez)))))
      ez (match m with mode_DN => true | _ => false end)
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (minus_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), is_finite x = true -> is_finite y = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || negb (Bsign y))%bool | _ => (Bsign x && negb (Bsign y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (minus_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), is_finite x = true -> is_finite y = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || negb (Bsign y))%bool | _ => (Bsign x && negb (Bsign y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || negb (Bsign y))%bool | _ => (Bsign x && negb (Bsign y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true

(is_finite (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y) = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + B2R (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + B2R (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + B2R (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || negb (Bsign y))%bool | _ => (Bsign x && negb (Bsign y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true

(is_finite y = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || negb (Bsign y))%bool | _ => (Bsign x && negb (Bsign y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true
H:is_finite y = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || negb (Bsign y))%bool | _ => (Bsign x && negb (Bsign y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || negb (Bsign y))%bool | _ => (Bsign x && negb (Bsign y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x - B2R y))) (bpow radix2 emax) then B2R (Bminus minus_nan m x y) = round radix2 fexp (round_mode m) (B2R x - B2R y) /\ is_finite (Bminus minus_nan m x y) = true /\ Bsign (Bminus minus_nan m x y) = match Rcompare (B2R x - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m x y) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)
Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y) = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + - B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + - B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = true /\ Bsign (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = match Rcompare (B2R (B754_finite sx mx ex Hx) + - B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) - B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bminus minus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) - B2R (B754_finite sy my ey Hy)) /\ is_finite (Bminus minus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = true /\ Bsign (Bminus minus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = match Rcompare (B2R (B754_finite sx mx ex Hx) - B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)
Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y) = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Fx:is_finite (B754_finite sx mx ex Hx) = true
Fy:is_finite (B754_finite sy my ey Hy) = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + - B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) + - B2R (B754_finite sy my ey Hy)) /\ is_finite (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = true /\ Bsign (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = match Rcompare (B2R (B754_finite sx mx ex Hx) + - B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m (B754_finite sx mx ex Hx) (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) - B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + - SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) - B2R (B754_finite sy my ey Hy)) /\ is_finite (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + - SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = true /\ Bsign (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + - SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = match Rcompare (B2R (B754_finite sx mx ex Hx) - B2R (B754_finite sy my ey Hy)) 0 with | Eq => match m with | mode_DN => (Bsign (B754_finite sx mx ex Hx) || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool | _ => (Bsign (B754_finite sx mx ex Hx) && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy)))%bool end | Lt => true | Gt => false end else B2FF (binary_normalize m (SpecFloatCopy.cond_Zopp sx (Z.pos (fst (shl_align mx ex (Z.min ex ey)))) + - SpecFloatCopy.cond_Zopp sy (Z.pos (fst (shl_align my ey (Z.min ex ey))))) (Z.min ex ey) match m with | mode_DN => true | _ => false end) = binary_overflow m (Bsign (B754_finite sx mx ex Hx)) /\ Bsign (B754_finite sx mx ex Hx) = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) (B754_finite sy my ey Hy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)
Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y) = negb (Bsign y)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
minus_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x, y:binary_float
Fx:is_finite x = true
Fy:is_finite y = true
H:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x + - B2R y))) (bpow radix2 emax) then B2R (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = round radix2 fexp (round_mode m) (B2R x + - B2R y) /\ is_finite (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = true /\ Bsign (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = match Rcompare (B2R x + - B2R y) 0 with | Eq => match m with | mode_DN => (Bsign x || Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool | _ => (Bsign x && Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y))%bool end | Lt => true | Gt => false end else B2FF (Bplus minus_nan m x (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)) = binary_overflow m (Bsign x) /\ Bsign x = Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y)

Bsign (Bopp (fun n : binary_float => minus_nan n (B754_zero false)) y) = negb (Bsign y)
now destruct y as [ | | | ]. Qed.
Fused Multiply-Add
Definition Bfma_szero m (x y z: binary_float) : bool :=
  let s_xy := xorb (Bsign x) (Bsign y) in  (* sign of product x*y *)
  if Bool.eqb s_xy (Bsign z) then s_xy
  else match m with mode_DN => true | _ => false end.

Definition Bfma fma_nan m (x y z: binary_float) :=
  match x, y with
  | B754_nan _ _ _, _ | _, B754_nan _ _ _
  | B754_infinity _, B754_zero _
  | B754_zero _, B754_infinity _ =>
      (* Multiplication produces NaN *)
      build_nan (fma_nan x y z)
  | B754_infinity sx, B754_infinity sy
  | B754_infinity sx, B754_finite sy _ _ _
  | B754_finite sx _ _ _, B754_infinity sy =>
      let s := xorb sx sy in
      (* Multiplication produces infinity with sign [s] *)
      match z with
      | B754_nan _ _ _ => build_nan (fma_nan x y z)
      | B754_infinity sz =>
          if Bool.eqb s sz then z else build_nan (fma_nan x y z)
      | _ => B754_infinity s
      end
  | B754_finite sx _ _ _, B754_zero sy
  | B754_zero sx, B754_finite sy _ _ _
  | B754_zero sx, B754_zero sy =>
      (* Multiplication produces zero *)
      match z with
      | B754_nan _ _ _ => build_nan (fma_nan x y z)
      | B754_zero _ => B754_zero (Bfma_szero m x y z)
      | _ => z
      end
  | B754_finite sx mx ex _, B754_finite sy my ey _ =>
      (* Multiplication produces a finite, non-zero result *)
      match z with
      | B754_nan _ _ _ => build_nan (fma_nan x y z)
      | B754_infinity sz => z
      | B754_zero _ =>
         let X := Float radix2 (cond_Zopp sx (Zpos mx)) ex in
         let Y := Float radix2 (cond_Zopp sy (Zpos my)) ey in
         let '(Float _ mr er) := Fmult X Y in
         binary_normalize m mr er (Bfma_szero m x y z)
      | B754_finite sz mz ez _ =>
         let X := Float radix2 (cond_Zopp sx (Zpos mx)) ex in
         let Y := Float radix2 (cond_Zopp sy (Zpos my)) ey in
         let Z := Float radix2 (cond_Zopp sz (Zpos mz)) ez in
         let '(Float _ mr er) := Fplus (Fmult X Y) Z in
         binary_normalize m mr er (Bfma_szero m x y z)
      end
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (fma_nan : binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}) (m : mode) (x y z : binary_float), let res := (B2R x * B2R y + B2R z)%R in is_finite x = true -> is_finite y = true -> is_finite z = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (Bfma fma_nan m x y z) = round radix2 fexp (round_mode m) res /\ is_finite (Bfma fma_nan m x y z) = true /\ Bsign (Bfma fma_nan m x y z) = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF (Bfma fma_nan m x y z) = binary_overflow m (Rlt_bool res 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (fma_nan : binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}) (m : mode) (x y z : binary_float), let res := (B2R x * B2R y + B2R z)%R in is_finite x = true -> is_finite y = true -> is_finite z = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (Bfma fma_nan m x y z) = round radix2 fexp (round_mode m) res /\ is_finite (Bfma fma_nan m x y z) = true /\ Bsign (Bfma fma_nan m x y z) = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF (Bfma fma_nan m x y z) = binary_overflow m (Rlt_bool res 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (Bfma fma_nan m x y z) = round radix2 fexp (round_mode m) res /\ is_finite (Bfma fma_nan m x y z) = true /\ Bsign (Bfma fma_nan m x y z) = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF (Bfma fma_nan m x y z) = binary_overflow m (Rlt_bool res 0)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true

(fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0)) (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop

PROP (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool

PROP (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool

forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
PROP (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool

forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
mr, er:Z
E:F2R {| Fnum := mr; Fexp := er |} = res

PROP (binary_normalize m mr er szero)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
mr, er:Z
E:F2R {| Fnum := mr; Fexp := er |} = res

(if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mr; Fexp := er |}))) (bpow radix2 emax) then B2R (binary_normalize m mr er szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mr; Fexp := er |}) /\ is_finite (binary_normalize m mr er szero) = true /\ Bsign (binary_normalize m mr er szero) = match Rcompare (F2R {| Fnum := mr; Fexp := er |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (binary_normalize m mr er szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mr; Fexp := er |}) 0)) -> PROP (binary_normalize m mr er szero)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
mr, er:Z
E:F2R {| Fnum := mr; Fexp := er |} = res

(if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := mr; Fexp := er |}))) (bpow radix2 emax) then B2R (binary_normalize m mr er szero) = round radix2 fexp (round_mode m) (F2R {| Fnum := mr; Fexp := er |}) /\ is_finite (binary_normalize m mr er szero) = true /\ Bsign (binary_normalize m mr er szero) = match Rcompare (F2R {| Fnum := mr; Fexp := er |}) 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (binary_normalize m mr er szero) = binary_overflow m (Rlt_bool (F2R {| Fnum := mr; Fexp := er |}) 0)) -> PROP (binary_normalize m mr er szero)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
mr, er:Z
E:F2R {| Fnum := mr; Fexp := er |} = res

(if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (binary_normalize m mr er szero) = round radix2 fexp (round_mode m) res /\ is_finite (binary_normalize m mr er szero) = true /\ Bsign (binary_normalize m mr er szero) = match Rcompare res 0 with | Eq => szero | Lt => true | Gt => false end else B2FF (binary_normalize m mr er szero) = binary_overflow m (Rlt_bool res 0)) -> PROP (binary_normalize m mr er szero)
tauto.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)

PROP (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float

PROP (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float

B2R x = 0%R \/ B2R y = 0%R -> PROP add_zero
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
ADDZERO:B2R x = 0%R \/ B2R y = 0%R -> PROP add_zero
PROP (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float

B2R x = 0%R \/ B2R y = 0%R -> PROP add_zero
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R

PROP add_zero
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R

res = B2R z
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R z
PROP add_zero
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R

res = B2R z
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R

(B2R x * B2R y + B2R z)%R = B2R z
destruct Z as [E|E]; rewrite E, ?Rmult_0_l, ?Rmult_0_r, Rplus_0_l; auto.
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R z

PROP add_zero
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_zero sz)

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (B754_zero szero) = round radix2 fexp (round_mode m) res /\ is_finite (B754_zero szero) = true /\ Bsign (B754_zero szero) = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF (B754_zero szero) = binary_overflow m (Rlt_bool res 0)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (B754_finite sz mz ez Bz) = round radix2 fexp (round_mode m) res /\ is_finite (B754_finite sz mz ez Bz) = true /\ Bsign (B754_finite sz mz ez Bz) = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF (B754_finite sz mz ez Bz) = binary_overflow m (Rlt_bool res 0)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_zero sz)

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (B754_zero szero) = round radix2 fexp (round_mode m) res /\ is_finite (B754_zero szero) = true /\ Bsign (B754_zero szero) = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF (B754_zero szero) = binary_overflow m (Rlt_bool res 0)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

if Rlt_bool (Rabs 0) (bpow radix2 emax) then B2R (B754_zero szero) = 0%R /\ is_finite (B754_zero szero) = true /\ Bsign (B754_zero szero) = match Rcompare 0 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF (B754_zero szero) = binary_overflow m (Rlt_bool 0 0)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

B2R (B754_zero szero) = 0%R /\ is_finite (B754_zero szero) = true /\ Bsign (B754_zero szero) = match Rcompare 0 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
(Rabs 0 < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

B2R (B754_zero szero) = 0%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
is_finite (B754_zero szero) = true /\ Bsign (B754_zero szero) = match Rcompare 0 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
(Rabs 0 < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

is_finite (B754_zero szero) = true /\ Bsign (B754_zero szero) = match Rcompare 0 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
(Rabs 0 < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

is_finite (B754_zero szero) = true
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
Bsign (B754_zero szero) = match Rcompare 0 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
(Rabs 0 < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

Bsign (B754_zero szero) = match Rcompare 0 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
(Rabs 0 < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

Bsign (B754_zero szero) = Bfma_szero m x y (B754_zero sz)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R
(Rabs 0 < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
res:=(B2R x * B2R y + B2R (B754_zero sz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_zero sz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = 0%R

(Rabs 0 < bpow radix2 emax)%R
rewrite Rabs_R0; apply bpow_gt_0.
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R (B754_finite sz mz ez Bz) = round radix2 fexp (round_mode m) res /\ is_finite (B754_finite sz mz ez Bz) = true /\ Bsign (B754_finite sz mz ez Bz) = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF (B754_finite sz mz ez Bz) = binary_overflow m (Rlt_bool res 0)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

B2R (B754_finite sz mz ez Bz) = B2R (B754_finite sz mz ez Bz) /\ is_finite (B754_finite sz mz ez Bz) = true /\ Bsign (B754_finite sz mz ez Bz) = match Rcompare (B2R (B754_finite sz mz ez Bz)) 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

B2R (B754_finite sz mz ez Bz) = B2R (B754_finite sz mz ez Bz)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
is_finite (B754_finite sz mz ez Bz) = true /\ Bsign (B754_finite sz mz ez Bz) = match Rcompare (B2R (B754_finite sz mz ez Bz)) 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

is_finite (B754_finite sz mz ez Bz) = true /\ Bsign (B754_finite sz mz ez Bz) = match Rcompare (B2R (B754_finite sz mz ez Bz)) 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

is_finite (B754_finite sz mz ez Bz) = true
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Bsign (B754_finite sz mz ez Bz) = match Rcompare (B2R (B754_finite sz mz ez Bz)) 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

Bsign (B754_finite sz mz ez Bz) = match Rcompare (B2R (B754_finite sz mz ez Bz)) 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

Bsign (B754_finite sz mz ez Bz) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |}) 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite true mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite true mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite true mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite true mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite true mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite true mz ez Bz)

Bsign (B754_finite true mz ez Bz) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mz); Fexp := ez |}) 0 with | Eq => Bfma_szero m x y (B754_finite true mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)
Bsign (B754_finite false mz ez Bz) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |}) 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite true mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite true mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite true mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite true mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite true mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite true mz ez Bz)

Bsign (B754_finite true mz ez Bz) = true
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite true mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite true mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite true mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite true mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite true mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite true mz ez Bz)
(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mz); Fexp := ez |} < 0)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)
Bsign (B754_finite false mz ez Bz) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |}) 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite true mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite true mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite true mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite true mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite true mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite true mz ez Bz)

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mz); Fexp := ez |} < 0)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)
Bsign (B754_finite false mz ez Bz) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |}) 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite true mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite true mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite true mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite true mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite true mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite true mz ez Bz)

(Fnum {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mz); Fexp := ez |} < 0)%Z
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)
Bsign (B754_finite false mz ez Bz) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |}) 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)

Bsign (B754_finite false mz ez Bz) = match Rcompare (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |}) 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)

Bsign (B754_finite false mz ez Bz) = false
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)
(0 < F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |})%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)

(0 < F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |})%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite false mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite false mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite false mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite false mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite false mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite false mz ez Bz)

(0 < Fnum {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mz); Fexp := ez |})%Z
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

(Rabs (B2R (B754_finite sz mz ez Bz)) < bpow radix2 emax)%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

Valid_rnd (round_mode m)
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)
generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y:binary_float
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R x * B2R y + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
Z:B2R x = 0%R \/ B2R y = 0%R
RES:res = B2R (B754_finite sz mz ez Bz)

generic_format radix2 fexp (B2R (B754_finite sz mz ez Bz))
apply generic_format_B2R.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x3 : binary_float | is_nan x3 = true}
m:mode
x, y, z:binary_float
res:=(B2R x * B2R y + B2R z)%R:R
H:is_finite x = true
H0:is_finite y = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m x y z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m x y z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan x y z) | _ => z end:binary_float
ADDZERO:B2R x = 0%R \/ B2R y = 0%R -> PROP add_zero

PROP (Bfma fma_nan m x y z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx, sy:bool
z:binary_float
res:=(B2R (B754_zero sx) * B2R (B754_zero sy) + B2R z)%R:R
H:is_finite (B754_zero sx) = true
H0:is_finite (B754_zero sy) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_zero sx) (B754_zero sy) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_zero sx) (B754_zero sy) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_zero sx) (B754_zero sy) z) | _ => z end:binary_float
ADDZERO:B2R (B754_zero sx) = 0%R \/ B2R (B754_zero sy) = 0%R -> PROP add_zero

PROP (Bfma fma_nan m (B754_zero sx) (B754_zero sy) z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
By:bounded my ey = true
z:binary_float
res:=(B2R (B754_zero sx) * B2R (B754_finite sy my ey By) + B2R z)%R:R
H:is_finite (B754_zero sx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_zero sx) (B754_finite sy my ey By) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_zero sx) (B754_finite sy my ey By) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_zero sx) (B754_finite sy my ey By) z) | _ => z end:binary_float
ADDZERO:B2R (B754_zero sx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
PROP (Bfma fma_nan m (B754_zero sx) (B754_finite sy my ey By) z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
z:binary_float
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_zero sy) + B2R z)%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_zero sy) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_zero sy) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_zero sy) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_finite sx mx ex Bx) (B754_zero sy) z) | _ => z end:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_zero sy) = 0%R -> PROP add_zero
PROP (Bfma fma_nan m (B754_finite sx mx ex Bx) (B754_zero sy) z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
z:binary_float
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R z)%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z) | _ => z end:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
PROP (Bfma fma_nan m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx, sy:bool
z:binary_float
res:=(B2R (B754_zero sx) * B2R (B754_zero sy) + B2R z)%R:R
H:is_finite (B754_zero sx) = true
H0:is_finite (B754_zero sy) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_zero sx) (B754_zero sy) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_zero sx) (B754_zero sy) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_zero sx) (B754_zero sy) z) | _ => z end:binary_float
ADDZERO:B2R (B754_zero sx) = 0%R \/ B2R (B754_zero sy) = 0%R -> PROP add_zero

PROP (Bfma fma_nan m (B754_zero sx) (B754_zero sy) z)
apply ADDZERO; auto.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx, sy:bool
my:positive
ey:Z
By:bounded my ey = true
z:binary_float
res:=(B2R (B754_zero sx) * B2R (B754_finite sy my ey By) + B2R z)%R:R
H:is_finite (B754_zero sx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_zero sx) (B754_finite sy my ey By) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_zero sx) (B754_finite sy my ey By) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_zero sx) (B754_finite sy my ey By) z) | _ => z end:binary_float
ADDZERO:B2R (B754_zero sx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero

PROP (Bfma fma_nan m (B754_zero sx) (B754_finite sy my ey By) z)
apply ADDZERO; auto.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
z:binary_float
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_zero sy) + B2R z)%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_zero sy) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_zero sy) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_zero sy) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_finite sx mx ex Bx) (B754_zero sy) z) | _ => z end:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_zero sy) = 0%R -> PROP add_zero

PROP (Bfma fma_nan m (B754_finite sx mx ex Bx) (B754_zero sy) z)
apply ADDZERO; auto.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
z:binary_float
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R z)%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite z = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z:bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=match z with | B754_zero _ => B754_zero szero | B754_nan _ _ _ => build_nan (fma_nan (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z) | _ => z end:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero

PROP (Bfma fma_nan m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) z)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero

PROP (let '{| Fnum := mr; Fexp := er |} := Fmult {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
mz:positive
ez:Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
PROP (let '{| Fnum := mr; Fexp := er |} := Fplus (Fmult {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) {| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |} in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero

PROP (let '{| Fnum := mr; Fexp := er |} := Fmult {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2

PROP (let '{| Fnum := mr; Fexp := er |} := Fmult X {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2

PROP (let '{| Fnum := mr; Fexp := er |} := Fmult X Y in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr0 er0 : Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
mr, er:Z
FRES:Fmult X Y = {| Fnum := mr; Fexp := er |}

PROP (binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr0 er0 : Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
mr, er:Z
FRES:Fmult X Y = {| Fnum := mr; Fexp := er |}

F2R {| Fnum := mr; Fexp := er |} = res
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr0 er0 : Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
mr, er:Z
FRES:Fmult X Y = {| Fnum := mr; Fexp := er |}

F2R {| Fnum := mr; Fexp := er |} = (B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_zero sz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_zero sz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_zero sz):bool
BINORM:forall mr0 er0 : Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_zero szero:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
mr, er:Z
FRES:Fmult X Y = {| Fnum := mr; Fexp := er |}

(F2R X * F2R Y)%R = (B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By))%R
auto.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
mz:positive
ez:Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero

PROP (let '{| Fnum := mr; Fexp := er |} := Fplus (Fmult {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) {| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |} in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
mz:positive
ez:Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2

PROP (let '{| Fnum := mr; Fexp := er |} := Fplus (Fmult X {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) {| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |} in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:Z
By:bounded my ey = true
sz:bool
mz:positive
ez:Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2

PROP (let '{| Fnum := mr; Fexp := er |} := Fplus (Fmult X Y) {| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |} in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz)))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:BinNums.Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:BinNums.Z
By:bounded my ey = true
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr er : BinNums.Z, F2R {| Fnum := mr; Fexp := er |} = res -> PROP (binary_normalize m mr er szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
Z:={| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |}:float radix2

PROP (let '{| Fnum := mr; Fexp := er |} := Fplus (Fmult X Y) Z in binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz)))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:BinNums.Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:BinNums.Z
By:bounded my ey = true
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr0 er0 : BinNums.Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
Z:={| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |}:float radix2
mr, er:BinNums.Z
FRES:Fplus (Fmult X Y) Z = {| Fnum := mr; Fexp := er |}

PROP (binary_normalize m mr er (Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz)))
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:BinNums.Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:BinNums.Z
By:bounded my ey = true
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr0 er0 : BinNums.Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
Z:={| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |}:float radix2
mr, er:BinNums.Z
FRES:Fplus (Fmult X Y) Z = {| Fnum := mr; Fexp := er |}

F2R {| Fnum := mr; Fexp := er |} = res
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:BinNums.Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:BinNums.Z
By:bounded my ey = true
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr0 er0 : BinNums.Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
Z:={| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |}:float radix2
mr, er:BinNums.Z
FRES:Fplus (Fmult X Y) Z = {| Fnum := mr; Fexp := er |}

F2R {| Fnum := mr; Fexp := er |} = (B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R
prec, emax:BinNums.Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:BinNums.Z
fexp:=FLT_exp emin prec:BinNums.Z -> BinNums.Z
fma_nan:binary_float -> binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
sx:bool
mx:positive
ex:BinNums.Z
Bx:bounded mx ex = true
sy:bool
my:positive
ey:BinNums.Z
By:bounded my ey = true
sz:bool
mz:positive
ez:BinNums.Z
Bz:bounded mz ez = true
res:=(B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R:R
H:is_finite (B754_finite sx mx ex Bx) = true
H0:is_finite (B754_finite sy my ey By) = true
H1:is_finite (B754_finite sz mz ez Bz) = true
PROP:=fun b : binary_float => if Rlt_bool (Rabs (round radix2 fexp (round_mode m) res)) (bpow radix2 emax) then B2R b = round radix2 fexp (round_mode m) res /\ is_finite b = true /\ Bsign b = match Rcompare res 0 with | Eq => Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz) | Lt => true | Gt => false end else B2FF b = binary_overflow m (Rlt_bool res 0):binary_float -> Prop
szero:=Bfma_szero m (B754_finite sx mx ex Bx) (B754_finite sy my ey By) (B754_finite sz mz ez Bz):bool
BINORM:forall mr0 er0 : BinNums.Z, F2R {| Fnum := mr0; Fexp := er0 |} = res -> PROP (binary_normalize m mr0 er0 szero)
add_zero:=B754_finite sz mz ez Bz:binary_float
ADDZERO:B2R (B754_finite sx mx ex Bx) = 0%R \/ B2R (B754_finite sy my ey By) = 0%R -> PROP add_zero
X:={| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:float radix2
Y:={| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}:float radix2
Z:={| Fnum := SpecFloatCopy.cond_Zopp sz (Z.pos mz); Fexp := ez |}:float radix2
mr, er:BinNums.Z
FRES:Fplus (Fmult X Y) Z = {| Fnum := mr; Fexp := er |}

(F2R X * F2R Y + F2R Z)%R = (B2R (B754_finite sx mx ex Bx) * B2R (B754_finite sy my ey By) + B2R (B754_finite sz mz ez Bz))%R
auto. Qed.
Division
Definition Fdiv_core_binary m1 e1 m2 e2 :=
  let d1 := Zdigits2 m1 in
  let d2 := Zdigits2 m2 in
  let e' := Z.min (fexp (d1 + e1 - (d2 + e2))) (e1 - e2) in
  let s := (e1 - e2 - e')%Z in
  let m' :=
    match s with
    | Zpos _  => Z.shiftl m1 s
    | Z0 => m1
    | Zneg _ => Z0
    end in
  let '(q, r) :=  Zfast_div_eucl m' m2 in
  (q, e', new_location m2 r loc_Exact).

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (sx : bool) (mx : positive) (ex : Z) (sy : bool) (my : positive) (ey : Z), let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let y := F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in let z := let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (x / y))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (x / y) /\ is_finite_FF z = true /\ sign_FF z = xorb sx sy else z = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (sx : bool) (mx : positive) (ex : Z) (sy : bool) (my : positive) (ey : Z), let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let y := F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in let z := let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (x / y))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (x / y) /\ is_finite_FF z = true /\ sign_FF z = xorb sx sy else z = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let y := F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} in let z := let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (x / y))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (x / y) /\ is_finite_FF z = true /\ sign_FF z = xorb sx sy else z = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (...) + ex - (SpecFloatCopy.Zdigits2 ... + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (...) + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 ... + ex - (... + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (...) + ex - (SpecFloatCopy.Zdigits2 ... + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 ... + ex - (... + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (...) + ex - (SpecFloatCopy.Zdigits2 ... + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex - (SpecFloatCopy.Zdigits2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z

valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (Zdigits radix2 (...) + ex - (Zdigits radix2 ... + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (...) + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (Zdigits radix2 ... + ex - (... + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (Zdigits radix2 (...) + ex - (Zdigits radix2 ... + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (Zdigits radix2 ... + ex - (... + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (Zdigits radix2 (...) + ex - (Zdigits radix2 ... + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey)) | Z.neg _ => 0 end (Z.pos my) in (q, Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey), new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z

valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z

(let '(m0, l) := Fdiv_core radix2 (Z.pos mx) ex (Z.pos my) ey e' in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z

(let '(m0, l) := let (m1', m2') := if (e' <=? ex - ey)%Z then ((Z.pos mx * radix2 ^ (ex - ey - e'))%Z, Z.pos my) else (Z.pos mx, (Z.pos my * radix2 ^ (e' - (ex - ey)))%Z) in let '(q, r) := Z.div_eucl m1' m2' in (q, new_location m2' r SpecFloatCopy.loc_Exact) in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z

(let '(m0, l) := let '(q, r) := Z.div_eucl (Z.pos mx * radix2 ^ (ex - ey - e')) (Z.pos my) in (q, new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl match (ex - ey - e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0 end (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':=match (ex - ey - e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0%Z end:Z

(let '(m0, l) := let '(q, r) := Z.div_eucl (Z.pos mx * radix2 ^ (ex - ey - e')) (Z.pos my) in (q, new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':=match (ex - ey - e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0%Z end:Z

mx' = (Z.pos mx * radix2 ^ (ex - ey - e'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':=match (ex - ey - e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0%Z end:Z
(let '(m0, l) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':=match (ex - ey - e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0%Z end:Z

mx' = (Z.pos mx * radix2 ^ (ex - ey - e'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':=match (ex - ey - e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0%Z end:Z

match (ex - ey - e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0%Z end = (Z.pos mx * radix2 ^ (ex - ey - e'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':=Z.pos mx:Z

Z.pos mx = (Z.pos mx * radix2 ^ 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
p:positive
mx':=Z.shiftl (Z.pos mx) (Z.pos p):Z
Z.shiftl (Z.pos mx) (Z.pos p) = (Z.pos mx * radix2 ^ Z.pos p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
p:positive
mx':=0%Z:Z
0%Z = (Z.pos mx * radix2 ^ Z.neg p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
p:positive
mx':=Z.shiftl (Z.pos mx) (Z.pos p):Z

Z.shiftl (Z.pos mx) (Z.pos p) = (Z.pos mx * radix2 ^ Z.pos p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
p:positive
mx':=0%Z:Z
0%Z = (Z.pos mx * radix2 ^ Z.neg p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
p:positive
mx':=0%Z:Z

0%Z = (Z.pos mx * radix2 ^ Z.neg p)%Z
easy.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':=match (ex - ey - e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - ey - e') | Z.neg _ => 0%Z end:Z

(let '(m0, l) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':Z

(let '(m0, l) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Zfast_div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx':Z

(let '(m0, l) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in inbetween_float radix2 m0 e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) l) -> valid_binary (let '(mz, ez, lz) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := let '(q, r) := Z.div_eucl mx' (Z.pos my) in (q, e', new_location (Z.pos my) r SpecFloatCopy.loc_Exact) in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z

inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact) -> valid_binary (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ sign_FF (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = xorb sx sy else binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

valid_binary (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ sign_FF (binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = xorb sx sy else binary_round_aux m (xorb sx sy) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact) = binary_overflow m (xorb sx sy))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

xorb sx sy = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
valid_binary (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ sign_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 else binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact) = binary_overflow m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

xorb sx sy = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.neg my; Fexp := ey |}) 0 = xorb sx true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := - Z.pos my; Fexp := ey |}) 0 = xorb sx true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / - F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * - / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (- (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = xorb sx true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (- (F2R {| Fnum := Z.neg mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= - (F2R {| Fnum := Z.neg mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= - F2R {| Fnum := Z.neg mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= - F2R {| Fnum := Z.neg mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
(0 <= / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= F2R (Fopp {| Fnum := Z.neg mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
(0 <= / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})) 0 = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) < - 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
(0 < / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(F2R {| Fnum := Z.pos my; Fexp := ey |} > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb sx false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb true false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(- F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(- (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) < - 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
(0 < / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}) 0 = xorb false false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
(0 <= / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 <= / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < / F2R {| Fnum := Z.pos my; Fexp := ey |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(0 < F2R {| Fnum := Z.pos my; Fexp := ey |})%R
now apply F2R_gt_0.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

valid_binary (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ sign_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 else binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact) = binary_overflow m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

valid_binary (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = true /\ sign_FF (binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)) = Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0 else binary_round_aux m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0) q e' (new_location (Z.pos my) r SpecFloatCopy.loc_Exact) = binary_overflow m (Rlt_bool (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) 0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
inbetween_float radix2 q e' (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
(e' <= cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
(/ F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(/ F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})%R <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
now apply F2R_neq_0 ; case sy.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

inbetween_float radix2 q e' (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

inbetween_float radix2 q e' (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) * / Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
now apply F2R_neq_0 ; case sy.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(e' <= cexp radix2 fexp (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(e' <= cexp radix2 fexp (Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}) * / Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(e' <= cexp radix2 fexp (Rabs (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * Rabs (/ F2R {| Fnum := Z.pos my; Fexp := ey |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(e' <= cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey)) <= cexp radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

(Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey) <= mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |} * / F2R {| Fnum := Z.pos my; Fexp := ey |}))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

F2R {| Fnum := Z.pos my; Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)
F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
sx:bool
mx:positive
ex:Z
sy:bool
my:positive
ey:Z
e':=Z.min (fexp (Zdigits radix2 (Z.pos mx) + ex - (Zdigits radix2 (Z.pos my) + ey))) (ex - ey):Z
mx', q, r:Z
Bz:inbetween_float radix2 q e' (F2R {| Fnum := Z.pos mx; Fexp := ex |} / F2R {| Fnum := Z.pos my; Fexp := ey |}) (new_location (Z.pos my) r SpecFloatCopy.loc_Exact)

F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |} <> 0%R
now apply F2R_neq_0 ; case sy. Qed. Definition Bdiv div_nan m x y := match x, y with | B754_nan _ _ _, _ | _, B754_nan _ _ _ => build_nan (div_nan x y) | B754_infinity sx, B754_infinity sy => build_nan (div_nan x y) | B754_infinity sx, B754_finite sy _ _ _ => B754_infinity (xorb sx sy) | B754_finite sx _ _ _, B754_infinity sy => B754_zero (xorb sx sy) | B754_infinity sx, B754_zero sy => B754_infinity (xorb sx sy) | B754_zero sx, B754_infinity sy => B754_zero (xorb sx sy) | B754_finite sx _ _ _, B754_zero sy => B754_infinity (xorb sx sy) | B754_zero sx, B754_finite sy _ _ _ => B754_zero (xorb sx sy) | B754_zero sx, B754_zero sy => build_nan (div_nan x y) | B754_finite sx mx ex _, B754_finite sy my ey _ => FF2B _ (proj1 (Bdiv_correct_aux m sx mx ex sy my ey)) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (div_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), B2R y <> 0%R -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x / B2R y))) (bpow radix2 emax) then B2R (Bdiv div_nan m x y) = round radix2 fexp (round_mode m) (B2R x / B2R y) /\ is_finite (Bdiv div_nan m x y) = is_finite x /\ (is_nan (Bdiv div_nan m x y) = false -> Bsign (Bdiv div_nan m x y) = xorb (Bsign x) (Bsign y)) else B2FF (Bdiv div_nan m x y) = binary_overflow m (xorb (Bsign x) (Bsign y))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (div_nan : binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}) (m : mode) (x y : binary_float), B2R y <> 0%R -> if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x / B2R y))) (bpow radix2 emax) then B2R (Bdiv div_nan m x y) = round radix2 fexp (round_mode m) (B2R x / B2R y) /\ is_finite (Bdiv div_nan m x y) = is_finite x /\ (is_nan (Bdiv div_nan m x y) = false -> Bsign (Bdiv div_nan m x y) = xorb (Bsign x) (Bsign y)) else B2FF (Bdiv div_nan m x y) = binary_overflow m (xorb (Bsign x) (Bsign y))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x2 : binary_float | is_nan x2 = true}
m:mode
x:binary_float
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x / B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bdiv div_nan m x (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R x / B2R (B754_finite sy my ey Hy)) /\ is_finite (Bdiv div_nan m x (B754_finite sy my ey Hy)) = is_finite x /\ (is_nan (Bdiv div_nan m x (B754_finite sy my ey Hy)) = false -> Bsign (Bdiv div_nan m x (B754_finite sy my ey Hy)) = xorb (Bsign x) (Bsign (B754_finite sy my ey Hy))) else B2FF (Bdiv div_nan m x (B754_finite sy my ey Hy)) = binary_overflow m (xorb (Bsign x) (Bsign (B754_finite sy my ey Hy)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R

forall x : binary_float, if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x / B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bdiv div_nan m x (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R x / B2R (B754_finite sy my ey Hy)) /\ is_finite (Bdiv div_nan m x (B754_finite sy my ey Hy)) = is_finite x /\ (is_nan (Bdiv div_nan m x (B754_finite sy my ey Hy)) = false -> Bsign (Bdiv div_nan m x (B754_finite sy my ey Hy)) = xorb (Bsign x) (Bsign (B754_finite sy my ey Hy))) else B2FF (Bdiv div_nan m x (B754_finite sy my ey Hy)) = binary_overflow m (xorb (Bsign x) (Bsign (B754_finite sy my ey Hy)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R

forall x : binary_float, if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R x * / B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bdiv div_nan m x (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R x * / B2R (B754_finite sy my ey Hy)) /\ is_finite (Bdiv div_nan m x (B754_finite sy my ey Hy)) = is_finite x /\ (is_nan (Bdiv div_nan m x (B754_finite sy my ey Hy)) = false -> Bsign (Bdiv div_nan m x (B754_finite sy my ey Hy)) = xorb (Bsign x) (Bsign (B754_finite sy my ey Hy))) else B2FF (Bdiv div_nan m x (B754_finite sy my ey Hy)) = binary_overflow m (xorb (Bsign x) (Bsign (B754_finite sy my ey Hy)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) * / B2R (B754_finite sy my ey Hy)))) (bpow radix2 emax) then B2R (Bdiv div_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = round radix2 fexp (round_mode m) (B2R (B754_finite sx mx ex Hx) * / B2R (B754_finite sy my ey Hy)) /\ is_finite (Bdiv div_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = is_finite (B754_finite sx mx ex Hx) /\ (is_nan (Bdiv div_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = false -> Bsign (Bdiv div_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = xorb (Bsign (B754_finite sx mx ex Hx)) (Bsign (B754_finite sy my ey Hy))) else B2FF (Bdiv div_nan m (B754_finite sx mx ex Hx) (B754_finite sy my ey Hy)) = binary_overflow m (xorb (Bsign (B754_finite sx mx ex Hx)) (Bsign (B754_finite sy my ey Hy)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (Bdiv_correct_aux m sx mx ex sy my ey))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (Bdiv_correct_aux m sx mx ex sy my ey))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (Bdiv_correct_aux m sx mx ex sy my ey))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (Bdiv_correct_aux m sx mx ex sy my ey))) = xorb sx sy) else B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (Bdiv_correct_aux m sx mx ex sy my ey))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

forall (e : valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true) (y : if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy)), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj e y))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj e y))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj e y))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj e y))) = xorb sx sy) else B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj e y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true

forall y : if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = xorb sx sy) else B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true

forall y : if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy else (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}))) (bpow radix2 emax) then B2R (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = xorb sx sy) else B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true

forall y : FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy, B2R (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy

B2R (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |}) /\ is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy

B2R (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy
is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy

is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy

is_finite (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy
is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy

is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} * / F2R {| Fnum := SpecFloatCopy.cond_Zopp sy (Z.pos my); Fexp := ey |})
H3:is_finite_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy

is_nan (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> sign_FF (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = xorb sx sy
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true

forall y : (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy), B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 y))) = binary_overflow m (xorb sx sy)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
div_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
m:mode
sy:bool
my:positive
ey:Z
Hy:bounded my ey = true
Zy:B2R (B754_finite sy my ey Hy) <> 0%R
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = true
H2:(let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) = binary_overflow m (xorb sx sy)

B2FF (FF2B (let '(mz, ez, lz) := Fdiv_core_binary (Z.pos mx) ex (Z.pos my) ey in binary_round_aux m (xorb sx sy) mz ez lz) (proj1 (conj H1 H2))) = binary_overflow m (xorb sx sy)
now rewrite B2FF_FF2B. Qed.
Square root
Definition Fsqrt_core_binary m e :=
  let d := Zdigits2 m in
  let e' := Z.min (fexp (Z.div2 (d + e + 1))) (Z.div2 e) in
  let s := (e - 2 * e')%Z in
  let m' :=
    match s with
    | Zpos p => Z.shiftl m s
    | Z0 => m
    | Zneg _ => Z0
    end in
  let (q, r) := Z.sqrtrem m' in
  let l :=
    if Zeq_bool r 0 then loc_Exact
    else loc_Inexact (if Zle_bool r q then Lt else Gt) in
  (q, e', l).

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (mx : positive) (ex : Z), bounded mx ex = true -> let x := F2R {| Fnum := Z.pos mx; Fexp := ex |} in let z := let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz in valid_binary z = true /\ FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt x) /\ is_finite_FF z = true /\ sign_FF z = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (mx : positive) (ex : Z), bounded mx ex = true -> let x := F2R {| Fnum := Z.pos mx; Fexp := ex |} in let z := let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz in valid_binary z = true /\ FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt x) /\ is_finite_FF z = true /\ sign_FF z = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true

let x := F2R {| Fnum := Z.pos mx; Fexp := ex |} in let z := let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz in valid_binary z = true /\ FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt x) /\ is_finite_FF z = true /\ sign_FF z = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true

valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (...) + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 ... + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (...) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 ... + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (...) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (SpecFloatCopy.Zdigits2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true

valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 (...) + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 ... + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 (...) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 ... + ex + 1))) (Z.div2 ex))%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * Z.min (fexp (Z.div2 (Zdigits radix2 (...) + ex + 1))) (Z.div2 ex)) | Z.neg _ => 0 end in (q, Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex), if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z

valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z

(2 * e' <= ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z

(2 * e' <= ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
H:(e' <= Z.div2 ex)%Z

(2 * e' <= ex)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
H:(e' <= Z.div2 ex)%Z

(2 * e' <= 2 * Z.div2 ex + (if Z.odd ex then 1 else 0))%Z
destruct Z.odd ; omega.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z

valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z

(let '(m0, l) := Fsqrt_core radix2 (Z.pos mx) ex e' in inbetween_float radix2 m0 e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) l) -> valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z

(let '(m0, l) := let (q, r) := Z.sqrtrem (Z.pos mx * radix2 ^ (ex - 2 * e')) in (q, if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in inbetween_float radix2 m0 e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) l) -> valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem match (ex - 2 * e')%Z with | 0 => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0 end in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':=match (ex - 2 * e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0%Z end:Z

(let '(m0, l) := let (q, r) := Z.sqrtrem (Z.pos mx * radix2 ^ (ex - 2 * e')) in (q, if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in inbetween_float radix2 m0 e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) l) -> valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':=match (ex - 2 * e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0%Z end:Z

mx' = (Z.pos mx * radix2 ^ (ex - 2 * e'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':=match (ex - 2 * e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0%Z end:Z
(let '(m0, l) := let (q, r) := Z.sqrtrem mx' in (q, if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in inbetween_float radix2 m0 e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) l) -> valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':=match (ex - 2 * e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0%Z end:Z

mx' = (Z.pos mx * radix2 ^ (ex - 2 * e'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':=match (ex - 2 * e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0%Z end:Z

match (ex - 2 * e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0%Z end = (Z.pos mx * radix2 ^ (ex - 2 * e'))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':=Z.pos mx:Z

Z.pos mx = (Z.pos mx * radix2 ^ 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
p:positive
mx':=Z.shiftl (Z.pos mx) (Z.pos p):Z
Z.shiftl (Z.pos mx) (Z.pos p) = (Z.pos mx * radix2 ^ Z.pos p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
p:positive
mx':=0%Z:Z
0%Z = (Z.pos mx * radix2 ^ Z.neg p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
p:positive
mx':=Z.shiftl (Z.pos mx) (Z.pos p):Z

Z.shiftl (Z.pos mx) (Z.pos p) = (Z.pos mx * radix2 ^ Z.pos p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
p:positive
mx':=0%Z:Z
0%Z = (Z.pos mx * radix2 ^ Z.neg p)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
p:positive
mx':=0%Z:Z

0%Z = (Z.pos mx * radix2 ^ Z.neg p)%Z
easy.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':=match (ex - 2 * e')%Z with | 0%Z => Z.pos mx | Z.pos _ => Z.shiftl (Z.pos mx) (ex - 2 * e') | Z.neg _ => 0%Z end:Z

(let '(m0, l) := let (q, r) := Z.sqrtrem mx' in (q, if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in inbetween_float radix2 m0 e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) l) -> valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx':Z

(let '(m0, l) := let (q, r) := Z.sqrtrem mx' in (q, if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in inbetween_float radix2 m0 e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) l) -> valid_binary (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ FF2R radix2 (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := let (q, r) := Z.sqrtrem mx' in (q, e', if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? q)%Z then Lt else Gt)) in binary_round_aux m false mz ez lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z

inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) (if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? mz)%Z then Lt else Gt)) -> valid_binary (binary_round_aux m false mz e' (if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? mz)%Z then Lt else Gt))) = true /\ FF2R radix2 (binary_round_aux m false mz e' (if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? mz)%Z then Lt else Gt))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' (if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? mz)%Z then Lt else Gt))) = true /\ sign_FF (binary_round_aux m false mz e' (if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? mz)%Z then Lt else Gt))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:=if Zeq_bool r 0 then SpecFloatCopy.loc_Exact else SpecFloatCopy.loc_Inexact (if (r <=? mz)%Z then Lt else Gt):SpecFloatCopy.location

inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location

inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
inbetween_float radix2 mz e' (Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))) lz
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(e' <= cexp radix2 fexp (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

inbetween_float radix2 mz e' (Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))) lz
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(e' <= cexp radix2 fexp (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(e' <= cexp radix2 fexp (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(e' <= cexp radix2 fexp (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(e' <= cexp radix2 fexp (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1)) <= cexp radix2 fexp (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1) <= mag radix2 (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1) <= Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(let z := binary_round_aux m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0) mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0 else z = binary_overflow m (Rlt_bool (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) 0))) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(let z := binary_round_aux m false mz e' lz in valid_binary z = true /\ (if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = false else z = binary_overflow m false)) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(let z := binary_round_aux m false mz e' lz in valid_binary z = true /\ FF2R radix2 z = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF z = true /\ sign_FF z = false) -> valid_binary (binary_round_aux m false mz e' lz) = true /\ FF2R radix2 (binary_round_aux m false mz e' lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (binary_round_aux m false mz e' lz) = true /\ sign_FF (binary_round_aux m false mz e' lz) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(Rabs (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(exists eps : R, (Rabs eps < bpow radix2 (- prec + 1))%R /\ round radix2 (FLT_exp emin prec) (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R) -> (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(exists eps : R, (Rabs eps < bpow radix2 (- prec + 1))%R /\ round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R) -> (round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R

(round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R

(sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R

(Rabs eps < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R

(bpow radix2 (- prec + 1) <= 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R

(bpow radix2 (- prec + 1) <= bpow radix2 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R

(- prec + 1 <= 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R

(0 < prec)%Z -> (- prec + 1 <= 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

((sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))² < (bpow radix2 emax)²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

((sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))² < (bpow radix2 emax)²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

((sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))² * (1 + eps)² < (bpow radix2 emax)²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(F2R {| Fnum := Z.pos mx; Fexp := ex |} * (1 + eps)² < (bpow radix2 emax)²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(F2R {| Fnum := Z.pos mx; Fexp := ex |} * (1 + eps)² < (bpow radix2 emax)²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(F2R {| Fnum := Z.pos mx; Fexp := ex |} * ((1 + eps) * (1 + eps)) < bpow radix2 emax * bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

((1 + eps) * (1 + eps) >= 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(bpow radix2 emax > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
((1 + eps) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(0 <= (1 + eps) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(bpow radix2 emax > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
((1 + eps) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(bpow radix2 emax > 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
((1 + eps) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
((1 + eps) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

((1 + eps) * (1 + eps) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

((1 + eps) * (1 + eps) < 4)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(1 + eps < 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 1 + eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(eps < R1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 1 + eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(0 <= 1 + eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(1 + - (1) <= 1 + eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(- (1) <= eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(- (1) < eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(0 <= 2)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(4 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(bpow radix2 2 <= bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(2 <= emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(0 < prec)%Z -> (2 <= emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R
(0 <= 1 + eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(0 <= 1 + eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(1 + - (1) <= 1 + eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(- (1) <= eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
eps:R
Heps:(Rabs eps < bpow radix2 (- prec + 1))%R
Hr:round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) = (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}) * (1 + eps))%R
Heps':(Rabs eps < 1)%R

(- (1) < eps)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(bpow radix2 (emin + prec - 1) <= Rabs (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(bpow radix2 (emin + prec - 1) <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(bpow radix2 (emin + prec - 1) <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

((bpow radix2 (emin + prec - 1))² <= (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= bpow radix2 (emin + prec - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

((bpow radix2 (emin + prec - 1))² <= (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

((bpow radix2 (emin + prec - 1))² <= (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))²)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

((bpow radix2 (emin + prec - 1))² <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

((bpow radix2 (emin + prec - 1))² <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

((bpow radix2 (emin + prec - 1))² <= bpow radix2 emin)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(bpow radix2 (emin + prec - 1) * bpow radix2 (emin + prec - 1) <= bpow radix2 emin)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(bpow radix2 (emin + prec - 1 + (emin + prec - 1)) <= bpow radix2 emin)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(emin + prec - 1 + (emin + prec - 1) <= emin)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(3 - emax - prec + prec - 1 + (3 - emax - prec + prec - 1) <= 3 - emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(bpow radix2 emin <= F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

forall e : Z, (emin <= fexp e)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
generic_format radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
e:Z

(emin <= fexp e)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
generic_format radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(0 < F2R {| Fnum := Z.pos mx; Fexp := ex |})%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
generic_format radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

generic_format radix2 fexp (F2R {| Fnum := Z.pos mx; Fexp := ex |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

canonical radix2 fexp {| Fnum := Z.pos mx; Fexp := ex |}
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

canonical_mantissa mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(0 <= round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

generic_format radix2 fexp 0
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz
(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
mx:positive
ex:Z
Hx:bounded mx ex = true
e':=Z.min (fexp (Z.div2 (Zdigits radix2 (Z.pos mx) + ex + 1))) (Z.div2 ex):Z
He:(2 * e' <= ex)%Z
mx', mz, r:Z
lz:SpecFloatCopy.location
Bz:inbetween_float radix2 mz e' (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) lz

(0 <= sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))%R
apply sqrt_ge_0. Qed. Definition Bsqrt sqrt_nan m x := match x with | B754_nan sx plx _ => build_nan (sqrt_nan x) | B754_infinity false => x | B754_infinity true => build_nan (sqrt_nan x) | B754_finite true _ _ _ => build_nan (sqrt_nan x) | B754_zero _ => x | B754_finite sx mx ex Hx => FF2B _ (proj1 (Bsqrt_correct_aux m mx ex Hx)) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (sqrt_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (m : mode) (x : binary_float), B2R (Bsqrt sqrt_nan m x) = round radix2 fexp (round_mode m) (sqrt (B2R x)) /\ is_finite (Bsqrt sqrt_nan m x) = match x with | B754_zero _ | B754_finite false _ _ _ => true | _ => false end /\ (is_nan (Bsqrt sqrt_nan m x) = false -> Bsign (Bsqrt sqrt_nan m x) = Bsign x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (sqrt_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (m : mode) (x : binary_float), B2R (Bsqrt sqrt_nan m x) = round radix2 fexp (round_mode m) (sqrt (B2R x)) /\ is_finite (Bsqrt sqrt_nan m x) = match x with | B754_zero _ | B754_finite false _ _ _ => true | _ => false end /\ (is_nan (Bsqrt sqrt_nan m x) = false -> Bsign (Bsqrt sqrt_nan m x) = Bsign x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

B2R (Bsqrt sqrt_nan m (B754_finite sx mx ex Hx)) = round radix2 fexp (round_mode m) (sqrt (B2R (B754_finite sx mx ex Hx))) /\ is_finite (Bsqrt sqrt_nan m (B754_finite sx mx ex Hx)) = (if sx then false else true) /\ (is_nan (Bsqrt sqrt_nan m (B754_finite sx mx ex Hx)) = false -> Bsign (Bsqrt sqrt_nan m (B754_finite sx mx ex Hx)) = Bsign (B754_finite sx mx ex Hx))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

B2R (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (Bsqrt_correct_aux m mx ex Hx))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})) /\ is_finite (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (Bsqrt_correct_aux m mx ex Hx))) = (if sx then false else true) /\ (is_nan (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (Bsqrt_correct_aux m mx ex Hx))) = false -> Bsign (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (Bsqrt_correct_aux m mx ex Hx))) = sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true

forall (e : valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true) (a : FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |})) /\ is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true /\ sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false), B2R (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj e a))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})) /\ is_finite (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj e a))) = (if sx then false else true) /\ (is_nan (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj e a))) = false -> Bsign (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj e a))) = sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

B2R (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |})) /\ is_finite (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = (if sx then false else true) /\ (is_nan (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (if sx then build_nan (sqrt_nan (B754_finite sx mx ex Hx)) else FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = sx)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

B2R (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |})) /\ is_finite (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = false /\ (is_nan (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

0%R = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |})) /\ false = false /\ (true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

0%R = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |})) = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

round radix2 fexp (round_mode m) match Rcase_abs (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) with | left _ => 0 | right a => Rsqrt {| nonneg := F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}; cond_nonneg := Rge_le (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) 0 a |} end = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} < 0)%R -> round radix2 fexp (round_mode m) 0 = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
forall r : (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} >= 0)%R, round radix2 fexp (round_mode m) (Rsqrt {| nonneg := F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}; cond_nonneg := Rge_le (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) 0 r |}) = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

round radix2 fexp (round_mode m) 0 = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
forall r : (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} >= 0)%R, round radix2 fexp (round_mode m) (Rsqrt {| nonneg := F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}; cond_nonneg := Rge_le (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) 0 r |}) = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

Valid_rnd (round_mode m)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
forall r : (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} >= 0)%R, round radix2 fexp (round_mode m) (Rsqrt {| nonneg := F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}; cond_nonneg := Rge_le (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) 0 r |}) = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

forall r : (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} >= 0)%R, round radix2 fexp (round_mode m) (Rsqrt {| nonneg := F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}; cond_nonneg := Rge_le (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) 0 r |}) = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
H:(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} >= 0)%R

round radix2 fexp (round_mode m) (Rsqrt {| nonneg := F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}; cond_nonneg := Rge_le (F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |}) 0 H |}) = 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
H:(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} >= 0)%R

(F2R {| Fnum := SpecFloatCopy.cond_Zopp true (Z.pos mx); Fexp := ex |} < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

true = false -> Bsign (build_nan (sqrt_nan (B754_finite true mx ex Hx))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |})) /\ is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

B2R (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true /\ (is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

is_finite (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false
is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

is_nan (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false -> Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
sqrt_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
m:mode
sx:bool
mx:positive
ex:Z
Hx:bounded mx ex = true
H1:valid_binary (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H2:FF2R radix2 (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = round radix2 fexp (round_mode m) (sqrt (F2R {| Fnum := Z.pos mx; Fexp := ex |}))
H3:is_finite_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = true
H4:sign_FF (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) = false

Bsign (FF2B (let '(mz, ez, lz) := Fsqrt_core_binary (Z.pos mx) ex in binary_round_aux m false mz ez lz) (proj1 (conj H1 (conj H2 (conj H3 H4))))) = false
now rewrite Bsign_FF2B. Qed.
A few values
Definition Bone := FF2B _ (proj1 (binary_round_correct mode_NE false 1 0)).

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

B2R Bone = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

B2R Bone = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

B2R (FF2B (binary_round mode_NE false 1 0) (proj1 (binary_round_correct mode_NE false 1 0))) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hr:=binary_round_correct mode_NE false 1 0:let z := binary_round mode_NE false 1 0 in valid_binary z = true /\ (let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp false 1; Fexp := 0 |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode mode_NE) x /\ is_finite_FF z = true /\ sign_FF z = false else z = binary_overflow mode_NE false)

B2R (FF2B (binary_round mode_NE false 1 0) (proj1 Hr)) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hr:=binary_round_correct mode_NE false 1 0:let z := binary_round mode_NE false 1 0 in valid_binary z = true /\ (let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp false 1; Fexp := 0 |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) x)) (bpow radix2 emax) then FF2R radix2 z = round radix2 fexp (round_mode mode_NE) x /\ is_finite_FF z = true /\ sign_FF z = false else z = binary_overflow mode_NE false)

FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true
Hr:let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp false 1; Fexp := 0 |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) x)) (bpow radix2 emax) then FF2R radix2 (binary_round mode_NE false 1 0) = round radix2 fexp (round_mode mode_NE) x /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false else binary_round mode_NE false 1 0 = binary_overflow mode_NE false

FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp false 1; Fexp := 0 |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) x)) (bpow radix2 emax) then FF2R radix2 (binary_round mode_NE false 1 0) = round radix2 fexp (round_mode mode_NE) x /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false else binary_round mode_NE false 1 0 = binary_overflow mode_NE false) -> FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(if Rlt_bool (Rabs (round radix2 fexp ZnearestE (F2R {| Fnum := 1; Fexp := 0 |}))) (bpow radix2 emax) then FF2R radix2 (binary_round mode_NE false 1 0) = round radix2 fexp ZnearestE (F2R {| Fnum := 1; Fexp := 0 |}) /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false else binary_round mode_NE false 1 0 = binary_overflow mode_NE false) -> FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(if Rlt_bool (Rabs (F2R {| Fnum := 1; Fexp := 0 |})) (bpow radix2 emax) then FF2R radix2 (binary_round mode_NE false 1 0) = F2R {| Fnum := 1; Fexp := 0 |} /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false else binary_round mode_NE false 1 0 = binary_overflow mode_NE false) -> FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true
generic_format radix2 fexp (F2R {| Fnum := 1; Fexp := 0 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(if Rlt_bool (Rabs (F2R {| Fnum := 1; Fexp := 0 |})) (bpow radix2 emax) then FF2R radix2 (binary_round mode_NE false 1 0) = F2R {| Fnum := 1; Fexp := 0 |} /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false else binary_round mode_NE false 1 0 = binary_overflow mode_NE false) -> FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(if Rlt_bool (Rabs 1) (bpow radix2 emax) then FF2R radix2 (binary_round mode_NE false 1 0) = 1%R /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false else binary_round mode_NE false 1 0 = binary_overflow mode_NE false) -> FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

FF2R radix2 (binary_round mode_NE false 1 0) = 1%R /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false -> FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true
(Rabs 1 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

FF2R radix2 (binary_round mode_NE false 1 0) = 1%R /\ is_finite_FF (binary_round mode_NE false 1 0) = true /\ sign_FF (binary_round mode_NE false 1 0) = false -> FF2R radix2 (binary_round mode_NE false 1 0) = 1%R
now intros (Hr, Hr'); rewrite Hr.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(Rabs 1 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(1 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(0 < emax)%Z
unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

generic_format radix2 fexp (F2R {| Fnum := 1; Fexp := 0 |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(cexp radix2 fexp (F2R {| Fnum := 1; Fexp := 0 |}) <= 0)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Vz:valid_binary (binary_round mode_NE false 1 0) = true

(Z.max (1 - prec) emin <= 0)%Z
unfold emin; unfold Prec_gt_0 in prec_gt_0_; lia. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

is_finite Bone = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

is_finite Bone = true
generalize Bone_correct; case Bone; simpl; try (intros; reflexivity); intros; exfalso; lra. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

Bsign Bone = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

Bsign Bone = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s':bool
m:positive
e:Z

F2R {| Fnum := SpecFloatCopy.cond_Zopp s' (Z.pos m); Fexp := e |} = 1%R -> s' = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s':bool
m:positive
e:Z

(IZR (Z.neg m) * bpow radix2 e)%R = 1%R -> true = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s':bool
m:positive
e:Z

(IZR (Z.neg m) * bpow radix2 e <= 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s':bool
m:positive
e:Z

(0 <= - (IZR (Z.neg m) * bpow radix2 e))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
s':bool
m:positive
e:Z

(0 <= - IZR (Z.neg m))%R
unfold IZR; rewrite <-INR_IPR; generalize (INR_pos m); lra. Qed.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

valid_binary (F754_finite false (shift_pos (Z.to_pos prec) 1 - 1) (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

valid_binary (F754_finite false (shift_pos (Z.to_pos prec) 1 - 1) (emax - prec)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

canonical_mantissa (shift_pos (Z.to_pos prec) 1 - 1) (emax - prec) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
(emax - prec <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

canonical_mantissa (shift_pos (Z.to_pos prec) 1 - 1) (emax - prec) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

fexp (Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)) + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

fexp (p + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

p = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
H:p = prec
fexp (p + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

p = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

Zdigits radix2 (Z.pos (shift_pos (Z.to_pos prec) 1) - 1) = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
(1 < shift_pos (Z.to_pos prec) 1)%positive
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

Zdigits radix2 (Z.pos (shift_pos (Z.to_pos prec) 1) - 1) = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

Zdigits radix2 (Z.pow_pos 2 (Z.to_pos prec) - 1) = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

(0 <= 2 ^ prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z
Zdigits radix2 (Z.pow_pos 2 (Z.to_pos prec) - 1) = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

(0 <= 2 ^ prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

(1 <= 2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

((radix2 : Z) ^ 0 <= (radix2 : Z) ^ prec)%Z
apply Zpower_le; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

Zdigits radix2 (Z.pow_pos 2 (Z.to_pos prec) - 1) = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(2 ^ (prec - 1) <= Z.abs (2 ^ prec - 1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z
(Z.abs (2 ^ prec - 1) < 2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(2 ^ (prec - 1) <= Z.abs (2 ^ prec - 1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(2 ^ (prec - 1) <= 2 ^ prec - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(2 ^ (prec - 1) <= 2 ^ (prec - 1 + 1) - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(2 ^ (prec - 1) <= 2 ^ (prec - 1) * 2 ^ 1 - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(2 ^ (prec - 1) <= 2 ^ (prec - 1) * 2 - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(1 <= 2 ^ (prec - 1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

((radix2 : Z) ^ 0 <= (radix2 : Z) ^ (prec - (radix2 : Z) ^ 0))%Z
apply Zpower_le; simpl; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
P2pm1:(0 <= 2 ^ prec - 1)%Z

(Z.abs (2 ^ prec - 1) < 2 ^ prec)%Z
now rewrite Z.abs_eq; [lia|].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

(1 < shift_pos (Z.to_pos prec) 1)%positive
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

(1 < Z.pos (shift_pos (Z.to_pos prec) 1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

(1 < 2 ^ Z.pos (Z.to_pos prec))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

(1 < 2 ^ prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z

((radix2 : Z) ^ 0 < (radix2 : Z) ^ prec)%Z
apply Zpower_lt; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
H:p = prec

fexp (p + (emax - prec)) = (emax - prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
p:=Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos prec) 1 - 1)):Z
H:p = prec

(emin <= prec + (emax - prec) - prec)%Z
unfold Prec_gt_0 in prec_gt_0_; unfold emin; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

(emax - prec <=? emax - prec)%Z = true
apply Zle_bool_true; unfold emin; unfold Prec_gt_0 in prec_gt_0_; lia. Qed. Definition Bmax_float := FF2B _ Bmax_float_proof.
Extraction/modification of mantissa/exponent
Definition Bnormfr_mantissa x :=
  match x with
  | B754_finite _ mx ex _ =>
    if Z.eqb ex (-prec)%Z then Npos mx else 0%N
  | _ => 0%N
  end.

Definition Bldexp mode f e :=
  match f with
  | B754_finite sx mx ex _ =>
    FF2B _ (proj1 (binary_round_correct mode sx mx (ex+e)))
  | _ => f
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (f : binary_float) (e : Z), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R f * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m f e) = round radix2 fexp (round_mode m) (B2R f * bpow radix2 e) /\ is_finite (Bldexp m f e) = is_finite f /\ Bsign (Bldexp m f e) = Bsign f else B2FF (Bldexp m f e) = binary_overflow m (Bsign f)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z

forall (m : mode) (f : binary_float) (e : Z), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R f * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m f e) = round radix2 fexp (round_mode m) (B2R f * bpow radix2 e) /\ is_finite (Bldexp m f e) = is_finite f /\ Bsign (Bldexp m f e) = Bsign f else B2FF (Bldexp m f e) = binary_overflow m (Bsign f)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R f * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m f e) = round radix2 fexp (round_mode m) (B2R f * bpow radix2 e) /\ is_finite (Bldexp m f e) = is_finite f /\ Bsign (Bldexp m f e) = Bsign f else B2FF (Bldexp m f e) = binary_overflow m (Bsign f)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z

forall s : bool, if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero s) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_zero s) e) = round radix2 fexp (round_mode m) (B2R (B754_zero s) * bpow radix2 e) /\ is_finite (Bldexp m (B754_zero s) e) = is_finite (B754_zero s) /\ Bsign (Bldexp m (B754_zero s) e) = Bsign (B754_zero s) else B2FF (Bldexp m (B754_zero s) e) = binary_overflow m (Bsign (B754_zero s))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
forall s : bool, if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_infinity s) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_infinity s) e) = round radix2 fexp (round_mode m) (B2R (B754_infinity s) * bpow radix2 e) /\ is_finite (Bldexp m (B754_infinity s) e) = is_finite (B754_infinity s) /\ Bsign (Bldexp m (B754_infinity s) e) = Bsign (B754_infinity s) else B2FF (Bldexp m (B754_infinity s) e) = binary_overflow m (Bsign (B754_infinity s))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
forall (s : bool) (pl : positive) (e0 : nan_pl pl = true), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_nan s pl e0) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_nan s pl e0) e) = round radix2 fexp (round_mode m) (B2R (B754_nan s pl e0) * bpow radix2 e) /\ is_finite (Bldexp m (B754_nan s pl e0) e) = is_finite (B754_nan s pl e0) /\ Bsign (Bldexp m (B754_nan s pl e0) e) = Bsign (B754_nan s pl e0) else B2FF (Bldexp m (B754_nan s pl e0) e) = binary_overflow m (Bsign (B754_nan s pl e0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
forall (s : bool) (m0 : positive) (e0 : Z) (e1 : bounded m0 e0 = true), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s m0 e0 e1) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_finite s m0 e0 e1) e) = round radix2 fexp (round_mode m) (B2R (B754_finite s m0 e0 e1) * bpow radix2 e) /\ is_finite (Bldexp m (B754_finite s m0 e0 e1) e) = is_finite (B754_finite s m0 e0 e1) /\ Bsign (Bldexp m (B754_finite s m0 e0 e1) e) = Bsign (B754_finite s m0 e0 e1) else B2FF (Bldexp m (B754_finite s m0 e0 e1) e) = binary_overflow m (Bsign (B754_finite s m0 e0 e1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z

forall s : bool, if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_zero s) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_zero s) e) = round radix2 fexp (round_mode m) (B2R (B754_zero s) * bpow radix2 e) /\ is_finite (Bldexp m (B754_zero s) e) = is_finite (B754_zero s) /\ Bsign (Bldexp m (B754_zero s) e) = Bsign (B754_zero s) else B2FF (Bldexp m (B754_zero s) e) = binary_overflow m (Bsign (B754_zero s))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool

if Rlt_bool (Rabs 0) (bpow radix2 emax) then 0%R = 0%R /\ true = true /\ s = s else F754_zero s = binary_overflow m s
now rewrite Rabs_R0, Rlt_bool_true; [|now apply bpow_gt_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z

forall s : bool, if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_infinity s) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_infinity s) e) = round radix2 fexp (round_mode m) (B2R (B754_infinity s) * bpow radix2 e) /\ is_finite (Bldexp m (B754_infinity s) e) = is_finite (B754_infinity s) /\ Bsign (Bldexp m (B754_infinity s) e) = Bsign (B754_infinity s) else B2FF (Bldexp m (B754_infinity s) e) = binary_overflow m (Bsign (B754_infinity s))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool

if Rlt_bool (Rabs 0) (bpow radix2 emax) then 0%R = 0%R /\ false = false /\ s = s else F754_infinity s = binary_overflow m s
now rewrite Rabs_R0, Rlt_bool_true; [|now apply bpow_gt_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z

forall (s : bool) (pl : positive) (e0 : nan_pl pl = true), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_nan s pl e0) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_nan s pl e0) e) = round radix2 fexp (round_mode m) (B2R (B754_nan s pl e0) * bpow radix2 e) /\ is_finite (Bldexp m (B754_nan s pl e0) e) = is_finite (B754_nan s pl e0) /\ Bsign (Bldexp m (B754_nan s pl e0) e) = Bsign (B754_nan s pl e0) else B2FF (Bldexp m (B754_nan s pl e0) e) = binary_overflow m (Bsign (B754_nan s pl e0))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool

forall pl : positive, nan_pl pl = true -> if Rlt_bool (Rabs 0) (bpow radix2 emax) then 0%R = 0%R /\ false = false /\ s = s else F754_nan s pl = binary_overflow m s
now rewrite Rabs_R0, Rlt_bool_true; [|now apply bpow_gt_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z

forall (s : bool) (m0 : positive) (e0 : Z) (e1 : bounded m0 e0 = true), if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s m0 e0 e1) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_finite s m0 e0 e1) e) = round radix2 fexp (round_mode m) (B2R (B754_finite s m0 e0 e1) * bpow radix2 e) /\ is_finite (Bldexp m (B754_finite s m0 e0 e1) e) = is_finite (B754_finite s m0 e0 e1) /\ Bsign (Bldexp m (B754_finite s m0 e0 e1) e) = Bsign (B754_finite s m0 e0 e1) else B2FF (Bldexp m (B754_finite s m0 e0 e1) e) = binary_overflow m (Bsign (B754_finite s m0 e0 e1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true

if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e))) (bpow radix2 emax) then B2R (Bldexp m (B754_finite s mf ef Hmef) e) = round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e) /\ is_finite (Bldexp m (B754_finite s mf ef Hmef) e) = is_finite (B754_finite s mf ef Hmef) /\ Bsign (Bldexp m (B754_finite s mf ef Hmef) e) = Bsign (B754_finite s mf ef Hmef) else B2FF (Bldexp m (B754_finite s mf ef Hmef) e) = binary_overflow m (Bsign (B754_finite s mf ef Hmef))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R

B2R (Bldexp m (B754_finite s mf ef Hmef) e) = round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e) /\ is_finite (Bldexp m (B754_finite s mf ef Hmef) e) = is_finite (B754_finite s mf ef Hmef) /\ Bsign (Bldexp m (B754_finite s mf ef Hmef) e) = Bsign (B754_finite s mf ef Hmef)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)))%R
B2FF (Bldexp m (B754_finite s mf ef Hmef) e) = binary_overflow m (Bsign (B754_finite s mf ef Hmef))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R

B2R (Bldexp m (B754_finite s mf ef Hmef) e) = round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e) /\ is_finite (Bldexp m (B754_finite s mf ef Hmef) e) = is_finite (B754_finite s mf ef Hmef) /\ Bsign (Bldexp m (B754_finite s mf ef Hmef) e) = Bsign (B754_finite s mf ef Hmef)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R

FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e) /\ is_finite_FF (binary_round m s mf (ef + e)) = is_finite (B754_finite s mf ef Hmef) /\ sign_FF (binary_round m s mf (ef + e)) = Bsign (B754_finite s mf ef Hmef)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R

FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (IZR (SpecFloatCopy.cond_Zopp s (Z.pos mf)) * bpow radix2 (ef + e)) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R
Hf:valid_binary (binary_round m s mf (ef + e)) = true
Hr:let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) x /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s else binary_round m s mf (ef + e) = binary_overflow m s

FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (IZR (SpecFloatCopy.cond_Zopp s (Z.pos mf)) * bpow radix2 (ef + e)) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R
Hf:valid_binary (binary_round m s mf (ef + e)) = true
Hr:FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s

FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (IZR (SpecFloatCopy.cond_Zopp s (Z.pos mf)) * bpow radix2 (ef + e)) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R
Hf:valid_binary (binary_round m s mf (ef + e)) = true
Hr:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}))) (bpow radix2 emax) then FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s else binary_round m s mf (ef + e) = binary_overflow m s
(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |})) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R
Hf:valid_binary (binary_round m s mf (ef + e)) = true
Hr:FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s

FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (IZR (SpecFloatCopy.cond_Zopp s (Z.pos mf)) * bpow radix2 (ef + e)) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s
now destruct Hr as (Hr, (Hfr, Hsr)); rewrite Hr, Hfr, Hsr.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)) < bpow radix2 emax)%R
Hf:valid_binary (binary_round m s mf (ef + e)) = true
Hr:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}))) (bpow radix2 emax) then FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s else binary_round m s mf (ef + e) = binary_overflow m s

(Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |})) < bpow radix2 emax)%R
now revert Hover; unfold B2R, F2R; simpl; rewrite Rmult_assoc, bpow_plus.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)))%R

B2FF (Bldexp m (B754_finite s mf ef Hmef) e) = binary_overflow m (Bsign (B754_finite s mf ef Hmef))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)))%R

binary_round m s mf (ef + e) = binary_overflow m s
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)))%R
Hf:valid_binary (binary_round m s mf (ef + e)) = true
Hr:let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |} in if Rlt_bool (Rabs (round radix2 fexp (round_mode m) x)) (bpow radix2 emax) then FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) x /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s else binary_round m s mf (ef + e) = binary_overflow m s

binary_round m s mf (ef + e) = binary_overflow m s
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
m:mode
f:binary_float
e:Z
s:bool
mf:positive
ef:Z
Hmef:bounded mf ef = true
Hover:(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (B2R (B754_finite s mf ef Hmef) * bpow radix2 e)))%R
Hf:valid_binary (binary_round m s mf (ef + e)) = true
Hr:if Rlt_bool (Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}))) (bpow radix2 emax) then FF2R radix2 (binary_round m s mf (ef + e)) = round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |}) /\ is_finite_FF (binary_round m s mf (ef + e)) = true /\ sign_FF (binary_round m s mf (ef + e)) = s else binary_round m s mf (ef + e) = binary_overflow m s

(bpow radix2 emax <= Rabs (round radix2 fexp (round_mode m) (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos mf); Fexp := ef + e |})))%R
now revert Hover; unfold B2R, F2R; simpl; rewrite Rmult_assoc, bpow_plus. Qed.
This hypothesis is needed to implement Bfrexp (otherwise, we have emin > - prec and Bfrexp cannot fit the mantissa in interval 0.5, 1))
Hypothesis Hemax : (3 <= emax)%Z.

Definition Ffrexp_core_binary s m e :=
  if (Z.to_pos prec <=? digits2_pos m)%positive then
    (F754_finite s m (-prec), (e + prec)%Z)
  else
    let d := (prec - Z.pos (digits2_pos m))%Z in
    (F754_finite s (shift_pos (Z.to_pos d) m) (-prec), (e + prec - d)%Z).

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (sx : bool) (mx : positive) (ex : Z), bounded mx ex = true -> let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let z := fst (Ffrexp_core_binary sx mx ex) in let e := snd (Ffrexp_core_binary sx mx ex) in valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (sx : bool) (mx : positive) (ex : Z), bounded mx ex = true -> let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let z := fst (Ffrexp_core_binary sx mx ex) in let e := snd (Ffrexp_core_binary sx mx ex) in valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true

let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |} in let z := fst (Ffrexp_core_binary sx mx ex) in let e := snd (Ffrexp_core_binary sx mx ex) in valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R

let x0 := x in let z := fst (Ffrexp_core_binary sx mx ex) in let e := snd (Ffrexp_core_binary sx mx ex) in valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x0 = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float

let x0 := x in let z0 := z in let e := snd (Ffrexp_core_binary sx mx ex) in valid_binary z0 = true /\ (/ 2 <= Rabs (FF2R radix2 z0) < 1)%R /\ x0 = (FF2R radix2 z0 * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z

valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z

(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z

(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z

canonical_mantissa mx ex = true /\ (ex <=? emax - prec)%Z = true -> (Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z

Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + ex - prec) emin = ex /\ (ex <=? emax - prec)%Z = true -> (Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
case (Z.max_spec (Z.pos (digits2_pos mx) + ex - prec) emin); lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z

valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z

(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z

(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z

(Z.pos (SpecFloatCopy.digits2_pos mx) <= Z.pos (Z.to_pos prec))%Z
now rewrite Z2Pos.id; [|now apply prec_gt_0_].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive

valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive

valid_binary (fst (if (Z.to_pos prec <=? SpecFloatCopy.digits2_pos mx)%positive then (F754_finite sx mx (- prec), (ex + prec)%Z) else (F754_finite sx (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec), (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))%Z))) = true /\ (/ 2 <= Rabs (FF2R radix2 (fst (if (Z.to_pos prec <=? SpecFloatCopy.digits2_pos mx)%positive then (F754_finite sx mx (- prec), (ex + prec)%Z) else (F754_finite sx (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec), (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))%Z)))) < 1)%R /\ x = (FF2R radix2 (fst (if (Z.to_pos prec <=? SpecFloatCopy.digits2_pos mx)%positive then (F754_finite sx mx (- prec), (ex + prec)%Z) else (F754_finite sx (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec), (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))%Z))) * bpow radix2 (snd (if (Z.to_pos prec <=? SpecFloatCopy.digits2_pos mx)%positive then (F754_finite sx mx (- prec), (ex + prec)%Z) else (F754_finite sx (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec), (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))%Z))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive

bounded mx (- prec) = true /\ (/ 2 <= Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := - prec |}) < 1)%R /\ x = (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := - prec |} * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
bounded (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) = true /\ (/ 2 <= Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx)); Fexp := - prec |}) < 1)%R /\ x = (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx)); Fexp := - prec |} * bpow radix2 (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive

bounded mx (- prec) = true /\ (/ 2 <= Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := - prec |}) < 1)%R /\ x = (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := - prec |} * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive

(canonical_mantissa mx (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec) * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive

SpecFloatCopy.digits2_pos mx = Z.to_pos prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
(canonical_mantissa mx (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec) * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive

SpecFloatCopy.digits2_pos mx = Z.to_pos prec
now apply Pos.le_antisym.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec

(canonical_mantissa mx (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec) * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec

Z.pos (SpecFloatCopy.digits2_pos mx) = prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
(canonical_mantissa mx (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec) * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec

Z.pos (SpecFloatCopy.digits2_pos mx) = prec
now rewrite Dmx', Z2Pos.id; [|apply prec_gt_0_].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(canonical_mantissa mx (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec) * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(canonical_mantissa mx (- prec) && (- prec <=? emax - prec)%Z)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
(/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec)) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec) * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(canonical_mantissa mx (- prec) && (- prec <=? emax - prec)%Z)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

canonical_mantissa mx (- prec) = true /\ (- prec <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

canonical_mantissa mx (- prec) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

Z.max (Z.pos (SpecFloatCopy.digits2_pos mx) + - prec - prec) emin = (- prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

Z.max (prec + - prec - prec) emin = (- prec)%Z
rewrite Z.max_l; [ring|unfold emin; lia].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec)) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx))) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(/ 2 <= IZR (Z.pos mx) * bpow radix2 (- prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
(IZR (Z.pos mx) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(/ 2 <= IZR (Z.pos mx) * bpow radix2 (- prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(/ 2 * bpow radix2 prec <= IZR (Z.pos mx) * bpow radix2 (- prec) * bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(/ 2 * bpow radix2 prec <= IZR (Z.pos mx) * 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(/ 2 * bpow radix2 prec <= IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(bpow radix2 (-1 + prec) <= IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(bpow radix2 (mag radix2 (IZR (Z.pos mx)) + -1) <= IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
b:=bpow radix2 (mag radix2 (IZR (Z.pos mx)) + -1):R

(b <= IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
b:=bpow radix2 (mag radix2 (IZR (Z.pos mx)) + -1):R

(b <= Rabs (IZR (Z.pos mx)))%R
apply bpow_mag_le; apply IZR_neq; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(IZR (Z.pos mx) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(IZR (Z.pos mx) * bpow radix2 (- prec) * bpow radix2 prec < 1 * bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(IZR (Z.pos mx) * 1 < 1 * bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(IZR (Z.pos mx) < bpow radix2 prec)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(IZR (Z.pos mx) < bpow radix2 (mag radix2 (IZR (Z.pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
b:=bpow radix2 (mag radix2 (IZR (Z.pos mx))):R

(IZR (Z.pos mx) < b)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec
b:=bpow radix2 (mag radix2 (IZR (Z.pos mx))):R

(Rabs (IZR (Z.pos mx)) < b)%R
apply bpow_mag_gt; apply IZR_neq; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec) * bpow radix2 (ex + prec))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(Z.to_pos prec <= SpecFloatCopy.digits2_pos mx)%positive
Dmx':SpecFloatCopy.digits2_pos mx = Z.to_pos prec
Dmx'':Z.pos (SpecFloatCopy.digits2_pos mx) = prec

(IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 ex)%R = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec + (ex + prec)))%R
now replace (_ + _)%Z with ex by ring.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive

bounded (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) = true /\ (/ 2 <= Rabs (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx)); Fexp := - prec |}) < 1)%R /\ x = (F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx)); Fexp := - prec |} * bpow radix2 (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive

(canonical_mantissa (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec) * bpow radix2 (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive

(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
(canonical_mantissa (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec) * bpow radix2 (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive

(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
now rewrite <-(Z2Pos.id prec); [|now apply prec_gt_0_].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(canonical_mantissa (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) && (- prec <=? emax - prec)%Z)%bool = true /\ (/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec)) < 1)%R /\ x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec) * bpow radix2 (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(canonical_mantissa (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) && (- prec <=? emax - prec)%Z)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
(/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec)) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec) * bpow radix2 (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(canonical_mantissa (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) && (- prec <=? emax - prec)%Z)%bool = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

canonical_mantissa (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) = true /\ (- prec <=? emax - prec)%Z = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

canonical_mantissa (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx) (- prec) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

Z.max (Z.pos (SpecFloatCopy.digits2_pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx)) + - prec - prec) emin = (- prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

Z.max (Zdigits radix2 (2 ^ Z.pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) * Z.pos mx) + - prec - prec) emin = (- prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

Z.max (Zdigits radix2 (2 ^ (prec - Z.pos (SpecFloatCopy.digits2_pos mx)) * Z.pos mx) + - prec - prec) emin = (- prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

Z.max (Zdigits radix2 (Z.pos mx * (radix2 : Z) ^ (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) + - prec - prec) emin = (- prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

Z.max (Zdigits radix2 (Z.pos mx) + (prec - Z.pos (SpecFloatCopy.digits2_pos mx)) + - prec - prec) emin = (- prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

Z.max (- prec) emin = (- prec)%Z
now rewrite Z.max_l; [|unfold emin; lia].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec)) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(/ 2 <= Rabs (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx)))) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(/ 2 <= IZR (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx)) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(/ 2 <= IZR (Z.pow_pos 2 (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))) * IZR (Z.pos mx) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(/ 2 <= bpow radix2 (Z.pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))) * IZR (Z.pos mx) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(/ 2 <= bpow radix2 (prec - Z.pos (SpecFloatCopy.digits2_pos mx)) * IZR (Z.pos mx) * bpow radix2 (- prec) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

(/ 2 <= bpow radix2 (- prec + (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) * IZR (Z.pos mx) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(/ 2 <= bpow radix2 (- prec + (prec - d)) * IZR (Z.pos mx) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(/ 2 <= bpow radix2 (- d) * IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z
(bpow radix2 (- d) * IZR (Z.pos mx) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(/ 2 <= bpow radix2 (- d) * IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 d * / 2 <= bpow radix2 d * (bpow radix2 (- d) * IZR (Z.pos mx)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 d * / 2 <= bpow radix2 0 * IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 d * / 2 <= IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 (d + -1) <= IZR (Z.pos mx))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 (d + -1) <= Rabs (IZR (Z.pos mx)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 (mag radix2 (IZR (Z.pos mx)) + -1) <= Rabs (IZR (Z.pos mx)))%R
apply bpow_mag_le; apply IZR_neq; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 (- d) * IZR (Z.pos mx) < 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 d * (bpow radix2 (- d) * IZR (Z.pos mx)) < bpow radix2 d * 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(bpow radix2 0 * IZR (Z.pos mx) < bpow radix2 d * 1)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(IZR (Z.pos mx) < bpow radix2 d)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(Rabs (IZR (Z.pos mx)) < bpow radix2 d)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z
d:=Z.pos (SpecFloatCopy.digits2_pos mx):Z

(Rabs (IZR (Z.pos mx)) < bpow radix2 (mag radix2 (IZR (Z.pos mx))))%R
apply bpow_mag_gt; apply IZR_neq; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pos (shift_pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) mx))) * bpow radix2 (- prec) * bpow radix2 (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

x = (IZR (SpecFloatCopy.cond_Zopp sx (Z.pow_pos 2 (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) * Z.pos mx)) * bpow radix2 (- prec + (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

x = (IZR (Z.pow_pos 2 (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))) * IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec + (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

x = (bpow radix2 (Z.pos (Z.to_pos (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))) * IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec + (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

x = (bpow radix2 (prec - Z.pos (SpecFloatCopy.digits2_pos mx)) * IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)) * bpow radix2 (- prec + (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx)))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
sx:bool
mx:positive
ex:Z
Bx:bounded mx ex = true
x:=F2R {| Fnum := SpecFloatCopy.cond_Zopp sx (Z.pos mx); Fexp := ex |}:R
z:=fst (Ffrexp_core_binary sx mx ex):full_float
e:=snd (Ffrexp_core_binary sx mx ex):Z
Dmx_le_prec:(Z.pos (SpecFloatCopy.digits2_pos mx) <= prec)%Z
Dmx_le_prec':(SpecFloatCopy.digits2_pos mx <= Z.to_pos prec)%positive
Dmx:(SpecFloatCopy.digits2_pos mx < Z.to_pos prec)%positive
Dmx':(Z.pos (SpecFloatCopy.digits2_pos mx) < prec)%Z

x = (bpow radix2 (- prec + (ex + prec - (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) + (prec - Z.pos (SpecFloatCopy.digits2_pos mx))) * IZR (SpecFloatCopy.cond_Zopp sx (Z.pos mx)))%R
now replace (_ + _)%Z with ex by ring; rewrite Rmult_comm. Qed. Definition Bfrexp f := match f with | B754_finite s m e H => let e' := snd (Ffrexp_core_binary s m e) in (FF2B _ (proj1 (Bfrexp_correct_aux s m e H)), e') | _ => (f, (-2*emax-prec)%Z) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall f : binary_float, is_finite_strict f = true -> let x := B2R f in let z := fst (Bfrexp f) in let e := snd (Bfrexp f) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall f : binary_float, is_finite_strict f = true -> let x := B2R f in let z := fst (Bfrexp f) in let e := snd (Bfrexp f) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true

let x := B2R (B754_finite s m e Hf) in let z := fst (Bfrexp (B754_finite s m e Hf)) in let e0 := snd (Bfrexp (B754_finite s m e Hf)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x = (B2R z * bpow radix2 e0)%R /\ e0 = mag radix2 x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true

(let x := F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} in let z := fst (Ffrexp_core_binary s m e) in let e0 := snd (Ffrexp_core_binary s m e) in valid_binary z = true /\ (/ 2 <= Rabs (FF2R radix2 z) < 1)%R /\ x = (FF2R radix2 z * bpow radix2 e0)%R) -> let x := B2R (B754_finite s m e Hf) in let z := fst (Bfrexp (B754_finite s m e Hf)) in let e0 := snd (Bfrexp (B754_finite s m e Hf)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x = (B2R z * bpow radix2 e0)%R /\ e0 = mag radix2 x
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true
Hb:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R

(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R /\ F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R /\ snd (Ffrexp_core_binary s m e) = mag radix2 (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true
Hb:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R

snd (Ffrexp_core_binary s m e) = mag radix2 (F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |})
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true
Hb:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R

snd (Ffrexp_core_binary s m e) = (mag radix2 (FF2R radix2 (fst (Ffrexp_core_binary s m e))) + snd (Ffrexp_core_binary s m e))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true
Hb:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R
FF2R radix2 (fst (Ffrexp_core_binary s m e)) <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true
Hb:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R

snd (Ffrexp_core_binary s m e) = (mag radix2 (FF2R radix2 (fst (Ffrexp_core_binary s m e))) + snd (Ffrexp_core_binary s m e))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true
Hb:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R

(- snd (Ffrexp_core_binary s m e) + snd (Ffrexp_core_binary s m e))%Z = (- snd (Ffrexp_core_binary s m e) + (mag radix2 (FF2R radix2 (fst (Ffrexp_core_binary s m e))) + snd (Ffrexp_core_binary s m e)))%Z
now ring_simplify; symmetry; apply mag_unique.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
f:binary_float
s:bool
m:positive
e:Z
Hf:bounded m e = true
Hb:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary s m e))) < 1)%R
Heq:F2R {| Fnum := SpecFloatCopy.cond_Zopp s (Z.pos m); Fexp := e |} = (FF2R radix2 (fst (Ffrexp_core_binary s m e)) * bpow radix2 (snd (Ffrexp_core_binary s m e)))%R

FF2R radix2 (fst (Ffrexp_core_binary s m e)) <> 0%R
intro H; destruct Hb as (Hb, _); revert Hb; rewrite H, Rabs_R0; lra. Qed.
Ulp
Definition Bulp x := Bldexp mode_NE Bone (fexp (snd (Bfrexp x))).

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall x : binary_float, is_finite x = true -> B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall x : binary_float, is_finite x = true -> B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float

forall s : bool, is_finite (B754_zero s) = true -> B2R (Bulp (B754_zero s)) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bulp (B754_zero s)) = true /\ Bsign (Bulp (B754_zero s)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
forall s : bool, is_finite (B754_infinity s) = true -> B2R (Bulp (B754_infinity s)) = ulp radix2 fexp (B2R (B754_infinity s)) /\ is_finite (Bulp (B754_infinity s)) = true /\ Bsign (Bulp (B754_infinity s)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
forall (s : bool) (pl : positive) (e : nan_pl pl = true), is_finite (B754_nan s pl e) = true -> B2R (Bulp (B754_nan s pl e)) = ulp radix2 fexp (B2R (B754_nan s pl e)) /\ is_finite (Bulp (B754_nan s pl e)) = true /\ Bsign (Bulp (B754_nan s pl e)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
forall (s : bool) (m : positive) (e : Z) (e0 : bounded m e = true), is_finite (B754_finite s m e e0) = true -> B2R (Bulp (B754_finite s m e e0)) = ulp radix2 fexp (B2R (B754_finite s m e e0)) /\ is_finite (Bulp (B754_finite s m e e0)) = true /\ Bsign (Bulp (B754_finite s m e e0)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float

forall s : bool, is_finite (B754_zero s) = true -> B2R (Bulp (B754_zero s)) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bulp (B754_zero s)) = true /\ Bsign (Bulp (B754_zero s)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

B2R (Bldexp mode_NE Bone (fexp (snd (Bfrexp (B754_zero s))))) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bldexp mode_NE Bone (fexp (snd (Bfrexp (B754_zero s))))) = true /\ Bsign (Bldexp mode_NE Bone (fexp (snd (Bfrexp (B754_zero s))))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

B2R (Bldexp mode_NE Bone emin) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
emin = fexp (snd (Bfrexp (B754_zero s)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

B2R (Bldexp mode_NE Bone emin) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

(if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R Bone * bpow radix2 emin))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = round radix2 fexp (round_mode mode_NE) (B2R Bone * bpow radix2 emin) /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone else B2FF (Bldexp mode_NE Bone emin) = binary_overflow mode_NE (Bsign Bone)) -> B2R (Bldexp mode_NE Bone emin) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

(if Rlt_bool (Rabs (bpow radix2 emin)) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone else B2FF (Bldexp mode_NE Bone emin) = binary_overflow mode_NE (Bsign Bone)) -> B2R (Bldexp mode_NE Bone emin) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone -> B2R (Bldexp mode_NE Bone emin) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
(Rabs (bpow radix2 emin) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone -> B2R (Bldexp mode_NE Bone emin) = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
Hr:B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone

bpow radix2 emin = ulp radix2 fexp (B2R (B754_zero s)) /\ is_finite Bone = true /\ Bsign Bone = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
Hr:B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone

bpow radix2 emin = ulp radix2 fexp (B2R (B754_zero s))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
Hr:B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone

bpow radix2 emin = match negligible_exp fexp with | Some n => bpow radix2 (fexp n) | None => 0%R end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
Hr:B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone
n:Z
Hn:negligible_exp (FLT_exp emin prec) = Some n
Hn':(n <= emin)%Z

bpow radix2 emin = match negligible_exp fexp with | Some n0 => bpow radix2 (fexp n0) | None => 0%R end
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
Hr:B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone
n:Z
Hn:negligible_exp (FLT_exp emin prec) = Some n
Hn':(n <= emin)%Z

bpow radix2 emin = bpow radix2 (FLT_exp emin prec n)
now unfold FLT_exp; rewrite Z.max_r; [|unfold Prec_gt_0 in prec_gt_0_; lia].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

(Rabs (bpow radix2 emin) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

(emin < emax)%Z
unfold emin; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

emin = fexp (snd (Bfrexp (B754_zero s)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

emin = fexp (-2 * emax - prec)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool

(-2 * emax - prec - prec <= emin)%Z
unfold emin; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float

forall s : bool, is_finite (B754_infinity s) = true -> B2R (Bulp (B754_infinity s)) = ulp radix2 fexp (B2R (B754_infinity s)) /\ is_finite (Bulp (B754_infinity s)) = true /\ Bsign (Bulp (B754_infinity s)) = false
intro; discriminate.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float

forall (s : bool) (pl : positive) (e : nan_pl pl = true), is_finite (B754_nan s pl e) = true -> B2R (Bulp (B754_nan s pl e)) = ulp radix2 fexp (B2R (B754_nan s pl e)) /\ is_finite (Bulp (B754_nan s pl e)) = true /\ Bsign (Bulp (B754_nan s pl e)) = false
intros s pl Hpl; discriminate.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float

forall (s : bool) (m : positive) (e : Z) (e0 : bounded m e = true), is_finite (B754_finite s m e e0) = true -> B2R (Bulp (B754_finite s m e e0)) = ulp radix2 fexp (B2R (B754_finite s m e e0)) /\ is_finite (Bulp (B754_finite s m e e0)) = true /\ Bsign (Bulp (B754_finite s m e e0)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true

B2R (Bldexp mode_NE Bone (fexp (snd (Bfrexp (B754_finite s m e Hme))))) = (if Req_bool (B2R (B754_finite s m e Hme)) 0 then match negligible_exp fexp with | Some n => bpow radix2 (fexp n) | None => 0%R end else bpow radix2 (fexp (mag radix2 (B2R (B754_finite s m e Hme))))) /\ is_finite (Bldexp mode_NE Bone (fexp (snd (Bfrexp (B754_finite s m e Hme))))) = true /\ Bsign (Bldexp mode_NE Bone (fexp (snd (Bfrexp (B754_finite s m e Hme))))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float

B2R (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = (if Req_bool (B2R f) 0 then match negligible_exp fexp with | Some n => bpow radix2 (fexp n) | None => 0%R end else bpow radix2 (fexp (mag radix2 (B2R f)))) /\ is_finite (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = true /\ Bsign (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float

B2R (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = bpow radix2 (fexp (mag radix2 (B2R f))) /\ is_finite (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = true /\ Bsign (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
B2R f <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float

B2R (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = bpow radix2 (fexp (mag radix2 (B2R f))) /\ is_finite (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = true /\ Bsign (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)

B2R (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = bpow radix2 (fexp (mag radix2 (B2R f))) /\ is_finite (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = true /\ Bsign (Bldexp mode_NE Bone (fexp (snd (Bfrexp f)))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)

B2R (Bldexp mode_NE Bone (fexp (mag radix2 (B2R f)))) = bpow radix2 (fexp (mag radix2 (B2R f))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 (B2R f)))) = true /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 (B2R f)))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = true /\ Bsign (Bldexp mode_NE Bone e') = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R Bone * bpow radix2 e'))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone e') = round radix2 fexp (round_mode mode_NE) (B2R Bone * bpow radix2 e') /\ is_finite (Bldexp mode_NE Bone e') = is_finite Bone /\ Bsign (Bldexp mode_NE Bone e') = Bsign Bone else B2FF (Bldexp mode_NE Bone e') = binary_overflow mode_NE (Bsign Bone)) -> B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = true /\ Bsign (Bldexp mode_NE Bone e') = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(if Rlt_bool (Rabs (bpow radix2 e')) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = is_finite Bone /\ Bsign (Bldexp mode_NE Bone e') = Bsign Bone else B2FF (Bldexp mode_NE Bone e') = binary_overflow mode_NE (Bsign Bone)) -> B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = true /\ Bsign (Bldexp mode_NE Bone e') = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
generic_format radix2 fexp (bpow radix2 e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(if Rlt_bool (Rabs (bpow radix2 e')) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = is_finite Bone /\ Bsign (Bldexp mode_NE Bone e') = Bsign Bone else B2FF (Bldexp mode_NE Bone e') = binary_overflow mode_NE (Bsign Bone)) -> B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = true /\ Bsign (Bldexp mode_NE Bone e') = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = is_finite Bone /\ Bsign (Bldexp mode_NE Bone e') = Bsign Bone -> B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = true /\ Bsign (Bldexp mode_NE Bone e') = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
(Rabs (bpow radix2 e') < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = is_finite Bone /\ Bsign (Bldexp mode_NE Bone e') = Bsign Bone -> B2R (Bldexp mode_NE Bone e') = bpow radix2 e' /\ is_finite (Bldexp mode_NE Bone e') = true /\ Bsign (Bldexp mode_NE Bone e') = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
Hr:B2R (Bldexp mode_NE Bone e') = bpow radix2 e'
Hf:is_finite (Bldexp mode_NE Bone e') = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone e') = Bsign Bone

bpow radix2 e' = bpow radix2 e' /\ is_finite Bone = true /\ Bsign Bone = false
now split; [|split; [apply is_finite_Bone|apply Bsign_Bone]].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(Rabs (bpow radix2 e') < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(bpow radix2 e' < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(bpow radix2 (Z.max (mag radix2 (B2R f) - prec) emin) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
Hm:Z.max (mag radix2 (B2R f) - prec) emin = (mag radix2 (B2R f) - prec)%Z

(mag radix2 (B2R f) - prec < emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
Hm:Z.max (mag radix2 (B2R f) - prec) emin = (mag radix2 (B2R f) - prec)%Z

(mag radix2 (B2R f) < prec + emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
Hm:Z.max (mag radix2 (B2R f) - prec) emin = (mag radix2 (B2R f) - prec)%Z

(mag radix2 (B2R f) <= emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
Hm:Z.max (mag radix2 (B2R f) - prec) emin = (mag radix2 (B2R f) - prec)%Z

B2R f <> 0%R
now unfold f, B2R; apply F2R_neq_0; case s.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

generic_format radix2 fexp (bpow radix2 e')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(e' + 1 - prec <= e')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z
(emin <= e')%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(e' + 1 - prec <= e')%Z
unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float
Hfr1:(/ 2 <= Rabs (B2R (fst (Bfrexp f))) < 1)%R
Hfr2:B2R f = (B2R (fst (Bfrexp f)) * bpow radix2 (snd (Bfrexp f)))%R
Hfr3:snd (Bfrexp f) = mag radix2 (B2R f)
e':=fexp (mag radix2 (B2R f)):Z

(emin <= e')%Z
apply Z.le_max_r.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
x:binary_float
s:bool
m:positive
e:Z
Hme:bounded m e = true
f:=B754_finite s m e Hme:binary_float

B2R f <> 0%R
now unfold f, B2R; apply F2R_neq_0; case s. Qed.
Successor (and predecessor)
Definition Bpred_pos pred_pos_nan x :=
  match x with
  | B754_finite _ mx _ _ =>
    let d :=
      if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then
        Bldexp mode_NE Bone (fexp (snd (Bfrexp x) - 1))
      else
        Bulp x in
    Bminus (fun _ => pred_pos_nan) mode_NE x d
  | _ => x
  end.

prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (pred_pos_nan : binary_float -> {x : binary_float | is_nan x = true}) (x : binary_float), (0 < B2R x)%R -> B2R (Bpred_pos pred_pos_nan x) = pred_pos radix2 fexp (B2R x) /\ is_finite (Bpred_pos pred_pos_nan x) = true /\ Bsign (Bpred_pos pred_pos_nan x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (pred_pos_nan : binary_float -> {x : binary_float | is_nan x = true}) (x : binary_float), (0 < B2R x)%R -> B2R (Bpred_pos pred_pos_nan x) = pred_pos radix2 fexp (B2R x) /\ is_finite (Bpred_pos pred_pos_nan x) = true /\ Bsign (Bpred_pos pred_pos_nan x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float

(0 < B2R x)%R -> B2R (Bpred_pos pred_pos_nan x) = pred_pos radix2 fexp (B2R x) /\ is_finite (Bpred_pos pred_pos_nan x) = true /\ Bsign (Bpred_pos pred_pos_nan x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float

(is_finite_strict x = true -> let x0 := B2R x in let z := fst (Bfrexp x) in let e := snd (Bfrexp x) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0) -> (0 < B2R x)%R -> B2R (Bpred_pos pred_pos_nan x) = pred_pos radix2 fexp (B2R x) /\ is_finite (Bpred_pos pred_pos_nan x) = true /\ Bsign (Bpred_pos pred_pos_nan x) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float

forall s : bool, (is_finite_strict (B754_zero s) = true -> let x0 := B2R (B754_zero s) in let z := fst (Bfrexp (B754_zero s)) in let e := snd (Bfrexp (B754_zero s)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0) -> (0 < B2R (B754_zero s))%R -> B2R (Bpred_pos pred_pos_nan (B754_zero s)) = pred_pos radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bpred_pos pred_pos_nan (B754_zero s)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_zero s)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
forall s : bool, (is_finite_strict (B754_infinity s) = true -> let x0 := B2R (B754_infinity s) in let z := fst (Bfrexp (B754_infinity s)) in let e := snd (Bfrexp (B754_infinity s)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0) -> (0 < B2R (B754_infinity s))%R -> B2R (Bpred_pos pred_pos_nan (B754_infinity s)) = pred_pos radix2 fexp (B2R (B754_infinity s)) /\ is_finite (Bpred_pos pred_pos_nan (B754_infinity s)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_infinity s)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
forall (s : bool) (pl : positive) (e : nan_pl pl = true), (is_finite_strict (B754_nan s pl e) = true -> let x0 := B2R (B754_nan s pl e) in let z := fst (Bfrexp (B754_nan s pl e)) in let e0 := snd (Bfrexp (B754_nan s pl e)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e0)%R /\ e0 = mag radix2 x0) -> (0 < B2R (B754_nan s pl e))%R -> B2R (Bpred_pos pred_pos_nan (B754_nan s pl e)) = pred_pos radix2 fexp (B2R (B754_nan s pl e)) /\ is_finite (Bpred_pos pred_pos_nan (B754_nan s pl e)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_nan s pl e)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
forall (s : bool) (m : positive) (e : Z) (e0 : bounded m e = true), (is_finite_strict (B754_finite s m e e0) = true -> let x0 := B2R (B754_finite s m e e0) in let z := fst (Bfrexp (B754_finite s m e e0)) in let e1 := snd (Bfrexp (B754_finite s m e e0)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e1)%R /\ e1 = mag radix2 x0) -> (0 < B2R (B754_finite s m e e0))%R -> B2R (Bpred_pos pred_pos_nan (B754_finite s m e e0)) = pred_pos radix2 fexp (B2R (B754_finite s m e e0)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite s m e e0)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite s m e e0)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float

forall s : bool, (is_finite_strict (B754_zero s) = true -> let x0 := B2R (B754_zero s) in let z := fst (Bfrexp (B754_zero s)) in let e := snd (Bfrexp (B754_zero s)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0) -> (0 < B2R (B754_zero s))%R -> B2R (Bpred_pos pred_pos_nan (B754_zero s)) = pred_pos radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bpred_pos pred_pos_nan (B754_zero s)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_zero s)) = false
simpl; intros s _ Bx; exfalso; apply (Rlt_irrefl _ Bx).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float

forall s : bool, (is_finite_strict (B754_infinity s) = true -> let x0 := B2R (B754_infinity s) in let z := fst (Bfrexp (B754_infinity s)) in let e := snd (Bfrexp (B754_infinity s)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0) -> (0 < B2R (B754_infinity s))%R -> B2R (Bpred_pos pred_pos_nan (B754_infinity s)) = pred_pos radix2 fexp (B2R (B754_infinity s)) /\ is_finite (Bpred_pos pred_pos_nan (B754_infinity s)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_infinity s)) = false
simpl; intros s _ Bx; exfalso; apply (Rlt_irrefl _ Bx).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float

forall (s : bool) (pl : positive) (e : nan_pl pl = true), (is_finite_strict (B754_nan s pl e) = true -> let x0 := B2R (B754_nan s pl e) in let z := fst (Bfrexp (B754_nan s pl e)) in let e0 := snd (Bfrexp (B754_nan s pl e)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e0)%R /\ e0 = mag radix2 x0) -> (0 < B2R (B754_nan s pl e))%R -> B2R (Bpred_pos pred_pos_nan (B754_nan s pl e)) = pred_pos radix2 fexp (B2R (B754_nan s pl e)) /\ is_finite (Bpred_pos pred_pos_nan (B754_nan s pl e)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_nan s pl e)) = false
simpl; intros s pl Hpl _ Bx; exfalso; apply (Rlt_irrefl _ Bx).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float

forall (s : bool) (m : positive) (e : Z) (e0 : bounded m e = true), (is_finite_strict (B754_finite s m e e0) = true -> let x0 := B2R (B754_finite s m e e0) in let z := fst (Bfrexp (B754_finite s m e e0)) in let e1 := snd (Bfrexp (B754_finite s m e e0)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e1)%R /\ e1 = mag radix2 x0) -> (0 < B2R (B754_finite s m e e0))%R -> B2R (Bpred_pos pred_pos_nan (B754_finite s m e e0)) = pred_pos radix2 fexp (B2R (B754_finite s m e e0)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite s m e e0)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite s m e e0)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0
Px:(0 < B2R (B754_finite sx mx ex Hmex))%R

B2R (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = pred_pos radix2 fexp (B2R (B754_finite sx mx ex Hmex)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0
Px:(0 < B2R (B754_finite sx mx ex Hmex))%R

sx = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0
Px:(0 < B2R (B754_finite sx mx ex Hmex))%R
Hsx:sx = false
B2R (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = pred_pos radix2 fexp (B2R (B754_finite sx mx ex Hmex)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0
Px:(0 < B2R (B754_finite sx mx ex Hmex))%R

sx = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0

(0 < IZR (Z.neg mx) * bpow radix2 ex)%R -> true = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0

(IZR (Z.neg mx) * bpow radix2 ex <= 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0

(IZR (Z.neg mx) * bpow radix2 ex <= 0 * bpow radix2 ex)%R
apply Rmult_le_compat_r; [apply bpow_ge_0|apply IZR_le; lia].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite sx mx ex Hmex) = true -> let x0 := B2R (B754_finite sx mx ex Hmex) in let z := fst (Bfrexp (B754_finite sx mx ex Hmex)) in let e := snd (Bfrexp (B754_finite sx mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0
Px:(0 < B2R (B754_finite sx mx ex Hmex))%R
Hsx:sx = false

B2R (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = pred_pos radix2 fexp (B2R (B754_finite sx mx ex Hmex)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite sx mx ex Hmex)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:is_finite_strict (B754_finite false mx ex Hmex) = true -> let x0 := B2R (B754_finite false mx ex Hmex) in let z := fst (Bfrexp (B754_finite false mx ex Hmex)) in let e := snd (Bfrexp (B754_finite false mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0

B2R (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = pred_pos radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:let x0 := B2R (B754_finite false mx ex Hmex) in let z := fst (Bfrexp (B754_finite false mx ex Hmex)) in let e := snd (Bfrexp (B754_finite false mx ex Hmex)) in (/ 2 <= Rabs (B2R z) < 1)%R /\ x0 = (B2R z * bpow radix2 e)%R /\ e = mag radix2 x0

B2R (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = pred_pos radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R /\ F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R /\ snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})

B2R (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = pred_pos radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})

B2R (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = pred_pos radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = true /\ Bsign (Bpred_pos pred_pos_nan (B754_finite false mx ex Hmex)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (snd (FF2B (fst (Ffrexp_core_binary false mx ex)) (proj1 (Bfrexp_correct_aux false mx ex Hmex)), snd (Ffrexp_core_binary false mx ex)) - 1)) else Bulp (B754_finite false mx ex Hmex))) = pred_pos radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (snd (FF2B (fst (Ffrexp_core_binary false mx ex)) (proj1 (Bfrexp_correct_aux false mx ex Hmex)), snd (Ffrexp_core_binary false mx ex)) - 1)) else Bulp (B754_finite false mx ex Hmex))) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (snd (FF2B (fst (Ffrexp_core_binary false mx ex)) (proj1 (Bfrexp_correct_aux false mx ex Hmex)), snd (Ffrexp_core_binary false mx ex)) - 1)) else Bulp (B754_finite false mx ex Hmex))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (snd (Ffrexp_core_binary false mx ex) - 1)) else Bulp (B754_finite false mx ex Hmex))) = pred_pos radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (snd (Ffrexp_core_binary false mx ex) - 1)) else Bulp (B754_finite false mx ex Hmex))) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (snd (Ffrexp_core_binary false mx ex) - 1)) else Bulp (B754_finite false mx ex Hmex))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)) else Bulp (B754_finite false mx ex Hmex))) = pred_pos radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)) else Bulp (B754_finite false mx ex Hmex))) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE (B754_finite false mx ex Hmex) (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)) else Bulp (B754_finite false mx ex Hmex))) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R

xr <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R

xr <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R

(IZR (Z.pos mx) * bpow radix2 ex)%R <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
H:(IZR (Z.pos mx) * bpow radix2 ex)%R = (0 * bpow radix2 ex)%R

False
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
H:IZR (Z.pos mx) = 0%R

False
apply eq_IZR in H; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:is_finite x' = true -> B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R Bone * bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (B2R Bone * bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)

generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)

generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)

(fexp (mag radix2 xr - 1) + 1 - prec <= fexp (mag radix2 xr - 1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
(emin <= fexp (mag radix2 xr - 1))%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)

(fexp (mag radix2 xr - 1) + 1 - prec <= fexp (mag radix2 xr - 1))%Z
unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)

(emin <= fexp (mag radix2 xr - 1))%Z
apply Z.le_max_r.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(Rabs (bpow radix2 (fexp (mag radix2 xr - 1))) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(fexp (mag radix2 xr - 1) < emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(mag radix2 xr - 1 - prec < emax)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(mag radix2 xr < prec + emax + 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

xr <> 0%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
(Rabs xr < bpow radix2 (prec + emax))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

xr <> 0%R
exact Nzxr.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(Rabs xr < bpow radix2 (prec + emax))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(Rabs xr < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
(bpow radix2 emax <= bpow radix2 (prec + emax))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(Rabs xr < bpow radix2 emax)%R
change xr with (B2R x'); apply abs_B2R_lt_emax.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone else B2FF (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = binary_overflow mode_NE (Bsign Bone)
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

(bpow radix2 emax <= bpow radix2 (prec + emax))%R
apply bpow_le; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float

B2R (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' d) = true /\ Bsign (Bminus (fun _ : binary_float => pred_pos_nan) mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)

is_finite d = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)

is_finite d = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)

is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
is_finite (Bulp x') = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)

is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = true
now rewrite (proj1 (proj2 Hldexp)), is_finite_Bone.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)

is_finite (Bulp x') = true
now rewrite (proj1 (proj2 Hulp)).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:is_finite d = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true

(0 <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true

(0 <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true

(0 <= IZR (Z.pos mx) * bpow radix2 ex)%R
now apply Rmult_le_pos; [apply IZR_le|apply bpow_ge_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R

(0 <= B2R d)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R

(0 <= B2R d)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R

(0 <= B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
(0 <= B2R (Bulp x'))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R

(0 <= B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R

(0 <= round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))))%R
now rewrite round_generic; [apply bpow_ge_0|apply valid_rnd_N|].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R

(0 <= B2R (Bulp x'))%R
rewrite (proj1 Hulp); apply ulp_ge_0.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(B2R d <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(B2R d <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
(B2R (Bulp x') <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(bpow radix2 (fexp (mag radix2 xr - 1)) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(bpow radix2 (fexp (mag radix2 xr - 1)) <= bpow radix2 (mag radix2 xr - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
(bpow radix2 (mag radix2 xr - 1) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(bpow radix2 (fexp (mag radix2 xr - 1)) <= bpow radix2 (mag radix2 xr - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(mag radix2 xr - 1 - prec <= mag radix2 xr - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
(emin <= mag radix2 xr - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(mag radix2 xr - 1 - prec <= mag radix2 xr - 1)%Z
unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(emin <= mag radix2 xr - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(emin + 1 <= mag radix2 xr)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(bpow radix2 (emin + 1 - 1) <= Rabs xr)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(bpow radix2 emin <= Rabs xr)%R
now change xr with (B2R x'); apply abs_B2R_ge_emin.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(bpow radix2 (mag radix2 xr - 1) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(bpow radix2 (mag radix2 xr - 1) <= Rabs (B2R x'))%R
now change xr with (B2R x'); apply bpow_mag_le.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(B2R (Bulp x') <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(0 < B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
generic_format radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

(0 < B2R x')%R
assert (B2R x' <> 0%R); [exact Nzxr|lra].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R

generic_format radix2 fexp (B2R x')
apply generic_format_B2R.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

(Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

(round radix2 fexp ZnearestE (Rabs (B2R x' - B2R d)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

(round radix2 fexp ZnearestE (B2R x' - B2R d) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

(round radix2 fexp ZnearestE (B2R x' - B2R d) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
(B2R x' < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

(round radix2 fexp ZnearestE (B2R x' - B2R d) <= B2R x')%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

generic_format radix2 fexp (B2R x')
apply generic_format_B2R.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d))) (bpow radix2 emax) then B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x' || negb (Bsign d))%bool | _ => (Bsign x' && negb (Bsign d))%bool end | Lt => true | Gt => false end else B2FF (Bminus minus_nan mode_NE x' d) = binary_overflow mode_NE (Bsign x') /\ Bsign x' = negb (Bsign d)
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

(B2R x' < bpow radix2 emax)%R
apply (Rle_lt_trans _ _ _ (Rle_abs _)), abs_B2R_lt_emax.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

B2R (Bminus minus_nan mode_NE x' d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) = pred_pos radix2 fexp (B2R x') /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) = pred_pos radix2 fexp (B2R x') /\ true = true /\ Bsign (Bminus minus_nan mode_NE x' d) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) = pred_pos radix2 fexp (B2R x') /\ true = true /\ match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) = pred_pos radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x')) = (if Req_bool (B2R x') (bpow radix2 (mag radix2 (B2R x') - 1)) then (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R else (B2R x' - ulp radix2 fexp (B2R x'))%R)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)))) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)))) = (B2R x' - ulp radix2 fexp (B2R x'))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bulp x')) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bulp x')) = (B2R x' - ulp radix2 fexp (B2R x'))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)))) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1)))) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - bpow radix2 (fexp (mag radix2 xr - 1))) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1))) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (pred_pos radix2 fexp (B2R x')) = pred_pos radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
pred_pos radix2 fexp (B2R x') = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (pred_pos radix2 fexp (B2R x')) = pred_pos radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

generic_format radix2 fexp (pred_pos radix2 fexp (B2R x'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

(0 < B2R x')%R
change xr with (B2R x') in Nzxr; lra.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

pred_pos radix2 fexp (B2R x') = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
now unfold pred_pos; rewrite Req_bool_true.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)))) = (B2R x' - ulp radix2 fexp (B2R x'))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

IZR (Z.pos mx) = bpow radix2 (prec - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)
B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

IZR (Z.pos mx) = bpow radix2 (prec - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

IZR (2 * Z.pos mx) = (2 * bpow radix2 (prec - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

IZR (Z.pos (shift_pos (Z.to_pos prec) 1)) = (2 * bpow radix2 (prec - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

IZR (Z.pow_pos 2 (Z.to_pos prec)) = (2 * bpow radix2 (prec - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

bpow radix2 (Z.pos (Z.to_pos prec)) = (2 * bpow radix2 (prec - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

bpow radix2 prec = (2 * bpow radix2 (prec - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

bpow radix2 prec = bpow radix2 (1 + (prec - 1))
f_equal; ring.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)

B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)

(IZR (Z.pos mx) * bpow radix2 ex)%R = bpow radix2 (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)

(prec - 1 + ex)%Z = (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)

(bpow radix2 (prec + ex - 1) <= F2R {| Fnum := Z.pos mx; Fexp := ex |} < bpow radix2 (prec + ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)

(bpow radix2 (prec + ex - 1) <= bpow radix2 (prec - 1 + ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)
(bpow radix2 (prec - 1 + ex) < bpow radix2 (prec + ex))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)

(bpow radix2 (prec + ex - 1) <= bpow radix2 (prec - 1 + ex))%R
right; f_equal; ring.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive = shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
Hmx:IZR (Z.pos mx) = bpow radix2 (prec - 1)

(bpow radix2 (prec - 1 + ex) < bpow radix2 (prec + ex))%R
apply bpow_lt; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bulp x')) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - ulp radix2 fexp (B2R x')) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

ulp radix2 fexp (B2R x') = bpow radix2 (fexp (mag radix2 (B2R x') - 1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
round radix2 fexp (round_mode mode_NE) (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1))) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

ulp radix2 fexp (B2R x') = bpow radix2 (fexp (mag radix2 (B2R x') - 1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

bpow radix2 (cexp radix2 fexp (B2R x')) = bpow radix2 (fexp (mag radix2 (B2R x') - 1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

fexp (mag radix2 (B2R x')) = fexp (mag radix2 (B2R x') - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

(mag radix2 (B2R x') <= emin + prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
H:(mag radix2 (B2R x') <= emin + prec)%Z
fexp (mag radix2 (B2R x')) = fexp (mag radix2 (B2R x') - 1)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

(mag radix2 (B2R x') <= emin + prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

canonical_mantissa mx ex = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hcm:canonical_mantissa mx ex = true
(mag radix2 (B2R x') <= emin + prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

canonical_mantissa mx ex = true
now generalize Hmex; unfold bounded; rewrite Bool.andb_true_iff.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hcm:canonical_mantissa mx ex = true

(mag radix2 (B2R x') <= emin + prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hcm:canonical radix2 fexp {| Fnum := SpecFloatCopy.cond_Zopp false (Z.pos mx); Fexp := ex |}

(mag radix2 (B2R x') <= emin + prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

ex = fexp (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})) -> (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) <= emin + prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))

(mag radix2 (B2R x') <= emin + prec)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

(mx~0)%positive = shift_pos (Z.to_pos prec) 1
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

Z.pos mx~0 = Z.pow_pos 2 (Z.to_pos prec)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

IZR (Z.pos mx~0) = bpow radix2 (Z.pos (Z.to_pos prec))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

IZR (Z.pos mx~0) = bpow radix2 prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

IZR (2 * Z.pos mx) = bpow radix2 prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

(IZR (Z.pos mx) * 2)%R = bpow radix2 prec
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

(IZR (Z.pos mx) * 2 * bpow radix2 (ex - 1))%R = (bpow radix2 prec * bpow radix2 (ex - 1))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

(IZR (Z.pos mx) * bpow radix2 (1 + (ex - 1)))%R = bpow radix2 (prec + (ex - 1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

(IZR (Z.pos mx) * bpow radix2 ex)%R = bpow radix2 (prec + (ex - 1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:(IZR (Z.pos mx) * bpow radix2 ex)%R = bpow radix2 (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

bpow radix2 (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1) = bpow radix2 (prec + (ex - 1))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:(IZR (Z.pos mx) * bpow radix2 ex)%R = bpow radix2 (mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |}) - 1)
Hex:ex = fexp (mag radix2 (B2R x'))
H':(emin + prec < mag radix2 (B2R x'))%Z

bpow radix2 (mag radix2 (B2R x') - 1) = bpow radix2 (prec + (fexp (mag radix2 (B2R x')) - 1))
unfold fexp, FLT_exp; rewrite Z.max_l; [f_equal; ring|lia].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
H:(mag radix2 (B2R x') <= emin + prec)%Z

fexp (mag radix2 (B2R x')) = fexp (mag radix2 (B2R x') - 1)
now unfold fexp, FLT_exp; do 2 (rewrite Z.max_r; [|lia]).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1))) = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (pred_pos radix2 fexp (B2R x')) = pred_pos radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)
pred_pos radix2 fexp (B2R x') = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (pred_pos radix2 fexp (B2R x')) = pred_pos radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

generic_format radix2 fexp (pred_pos radix2 fexp (B2R x'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

generic_format radix2 fexp (B2R x')
apply generic_format_B2R.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' = bpow radix2 (mag radix2 (B2R x') - 1)

pred_pos radix2 fexp (B2R x') = (B2R x' - bpow radix2 (fexp (mag radix2 (B2R x') - 1)))%R
now unfold pred_pos; rewrite Req_bool_true.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - B2R (Bulp x')) = (B2R x' - ulp radix2 fexp (B2R x'))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (B2R x' - ulp radix2 fexp (B2R x')) = (B2R x' - ulp radix2 fexp (B2R x'))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (pred_pos radix2 fexp (B2R x')) = pred_pos radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)
pred_pos radix2 fexp (B2R x') = (B2R x' - ulp radix2 fexp (B2R x'))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

round radix2 fexp (round_mode mode_NE) (pred_pos radix2 fexp (B2R x')) = pred_pos radix2 fexp (B2R x')
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

generic_format radix2 fexp (pred_pos radix2 fexp (B2R x'))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

(0 < B2R x')%R
change xr with (B2R x') in Nzxr; lra.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_pos_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hfrexpx_bounds:(/ 2 <= Rabs (FF2R radix2 (fst (Ffrexp_core_binary false mx ex))) < 1)%R
Hfrexpx_eq:F2R {| Fnum := Z.pos mx; Fexp := ex |} = (FF2R radix2 (fst (Ffrexp_core_binary false mx ex)) * bpow radix2 (snd (Ffrexp_core_binary false mx ex)))%R
Hfrexpx_exp:snd (Ffrexp_core_binary false mx ex) = mag radix2 (F2R {| Fnum := Z.pos mx; Fexp := ex |})
x':=B754_finite false mx ex Hmex:binary_float
xr:=F2R {| Fnum := Z.pos mx; Fexp := ex |}:R
Nzxr:xr <> 0%R
Hulp:B2R (Bulp x') = ulp radix2 fexp (B2R x') /\ is_finite (Bulp x') = true /\ Bsign (Bulp x') = false
Hldexp:B2R (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = round radix2 fexp (round_mode mode_NE) (bpow radix2 (fexp (mag radix2 xr - 1))) /\ is_finite (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone (fexp (mag radix2 xr - 1))) = Bsign Bone
Fbpowxr:generic_format radix2 fexp (bpow radix2 (fexp (mag radix2 xr - 1)))
d:=if (mx~0 =? shift_pos (Z.to_pos prec) 1)%positive then Bldexp mode_NE Bone (fexp (mag radix2 xr - 1)) else Bulp x':binary_float
minus_nan:=fun _ : binary_float => pred_pos_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hminus:B2R (Bminus minus_nan mode_NE x' d) = round radix2 fexp (round_mode mode_NE) (B2R x' - B2R d) /\ is_finite (Bminus minus_nan mode_NE x' d) = true /\ Bsign (Bminus minus_nan mode_NE x' d) = match Rcompare (B2R x' - B2R d) 0 with | Eq => (Bsign x' && negb (Bsign d))%bool | Lt => true | Gt => false end
Fd:is_finite d = true
Px:(0 <= B2R x')%R
Pd:(0 <= B2R d)%R
Hdlex:(B2R d <= B2R x')%R
Hd:(mx~0)%positive <> shift_pos (Z.to_pos prec) 1
Hpred:B2R x' <> bpow radix2 (mag radix2 (B2R x') - 1)

pred_pos radix2 fexp (B2R x') = (B2R x' - ulp radix2 fexp (B2R x'))%R
now unfold pred_pos; rewrite Req_bool_false. Qed. Definition Bsucc succ_nan x := match x with | B754_zero _ => Bldexp mode_NE Bone emin | B754_infinity false => x | B754_infinity true => Bopp succ_nan Bmax_float | B754_nan _ _ _ => build_nan (succ_nan x) | B754_finite false _ _ _ => Bplus (fun _ => succ_nan) mode_NE x (Bulp x) | B754_finite true _ _ _ => Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan x)) end.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (succ_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite x = true -> if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bsucc succ_nan x) = succ radix2 fexp (B2R x) /\ is_finite (Bsucc succ_nan x) = true /\ Bsign (Bsucc succ_nan x) = (Bsign x && is_finite_strict x)%bool else B2FF (Bsucc succ_nan x) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (succ_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite x = true -> if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bsucc succ_nan x) = succ radix2 fexp (B2R x) /\ is_finite (Bsucc succ_nan x) = true /\ Bsign (Bsucc succ_nan x) = (Bsign x && is_finite_strict x)%bool else B2FF (Bsucc succ_nan x) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

succ radix2 fexp 0 = bpow radix2 emin
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
forall (succ_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite x = true -> if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bsucc succ_nan x) = succ radix2 fexp (B2R x) /\ is_finite (Bsucc succ_nan x) = true /\ Bsign (Bsucc succ_nan x) = (Bsign x && is_finite_strict x)%bool else B2FF (Bsucc succ_nan x) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

succ radix2 fexp 0 = bpow radix2 emin
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

ulp radix2 fexp 0 = bpow radix2 emin
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

match negligible_exp fexp with | Some n => bpow radix2 (fexp n) | None => 0%R end = bpow radix2 emin
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
n:Z
Hne:negligible_exp (FLT_exp emin prec) = Some n
Hn:(n <= emin)%Z

match negligible_exp fexp with | Some n0 => bpow radix2 (fexp n0) | None => 0%R end = bpow radix2 emin
now unfold fexp; rewrite Hne; unfold FLT_exp; rewrite Z.max_r; [|unfold Prec_gt_0 in prec_gt_0_; lia].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin

forall (succ_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite x = true -> if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bsucc succ_nan x) = succ radix2 fexp (B2R x) /\ is_finite (Bsucc succ_nan x) = true /\ Bsign (Bsucc succ_nan x) = (Bsign x && is_finite_strict x)%bool else B2FF (Bsucc succ_nan x) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

if Rlt_bool (succ radix2 fexp (B2R (B754_zero s))) (bpow radix2 emax) then B2R (Bsucc succ_nan (B754_zero s)) = succ radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bsucc succ_nan (B754_zero s)) = true /\ Bsign (Bsucc succ_nan (B754_zero s)) = (Bsign (B754_zero s) && is_finite_strict (B754_zero s))%bool else B2FF (Bsucc succ_nan (B754_zero s)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
if Rlt_bool (succ radix2 fexp (B2R (B754_finite sx mx ex Hmex))) (bpow radix2 emax) then B2R (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = succ radix2 fexp (B2R (B754_finite sx mx ex Hmex)) /\ is_finite (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = true /\ Bsign (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = (Bsign (B754_finite sx mx ex Hmex) && is_finite_strict (B754_finite sx mx ex Hmex))%bool else B2FF (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

if Rlt_bool (succ radix2 fexp (B2R (B754_zero s))) (bpow radix2 emax) then B2R (Bsucc succ_nan (B754_zero s)) = succ radix2 fexp (B2R (B754_zero s)) /\ is_finite (Bsucc succ_nan (B754_zero s)) = true /\ Bsign (Bsucc succ_nan (B754_zero s)) = (Bsign (B754_zero s) && is_finite_strict (B754_zero s))%bool else B2FF (Bsucc succ_nan (B754_zero s)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

(if Rlt_bool (Rabs (round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin) /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone else B2FF (Bldexp mode_NE Bone emin) = binary_overflow mode_NE (Bsign Bone)) -> if Rlt_bool (succ radix2 fexp 0) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = succ radix2 fexp 0 /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = (s && false)%bool else B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
(if Rlt_bool (Rabs (round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin) /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone else B2FF (Bldexp mode_NE Bone emin) = binary_overflow mode_NE (Bsign Bone)) -> if Rlt_bool (succ radix2 fexp 0) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = succ radix2 fexp 0 /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = (s && false)%bool else B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

generic_format radix2 fexp (bpow radix2 emin)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

(fexp (emin + 1) <= emin)%Z
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool

(emin + 1 - prec <= emin)%Z
unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin

(if Rlt_bool (Rabs (round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin))) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin) /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone else B2FF (Bldexp mode_NE Bone emin) = binary_overflow mode_NE (Bsign Bone)) -> if Rlt_bool (succ radix2 fexp 0) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = succ radix2 fexp 0 /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = (s && false)%bool else B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin

B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin) /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone -> if Rlt_bool (bpow radix2 emin) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = (s && false)%bool else B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
(Rabs (round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin

B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin) /\ is_finite (Bldexp mode_NE Bone emin) = is_finite Bone /\ Bsign (Bldexp mode_NE Bone emin) = Bsign Bone -> if Rlt_bool (bpow radix2 emin) (bpow radix2 emax) then B2R (Bldexp mode_NE Bone emin) = bpow radix2 emin /\ is_finite (Bldexp mode_NE Bone emin) = true /\ Bsign (Bldexp mode_NE Bone emin) = (s && false)%bool else B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
Hr:B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone

if Rlt_bool (bpow radix2 emin) (bpow radix2 emax) then round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin) = bpow radix2 emin /\ is_finite Bone = true /\ Bsign Bone = (s && false)%bool else B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
Hr:B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone

if Rlt_bool (bpow radix2 emin) (bpow radix2 emax) then round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin /\ true = true /\ false = (s && false)%bool else B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
Hr:B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone
Hover:(bpow radix2 emin < bpow radix2 emax)%R

round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin /\ true = true /\ false = (s && false)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
Hr:B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone
Hover:(bpow radix2 emax <= bpow radix2 emin)%R
B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
Hr:B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone
Hover:(bpow radix2 emin < bpow radix2 emax)%R

round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin /\ true = true /\ false = (s && false)%bool
now rewrite Bool.andb_false_r.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
Hr:B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone
Hover:(bpow radix2 emax <= bpow radix2 emin)%R

B2FF (Bldexp mode_NE Bone emin) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin
Hr:B2R (Bldexp mode_NE Bone emin) = round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)
Hf:is_finite (Bldexp mode_NE Bone emin) = is_finite Bone
Hs:Bsign (Bldexp mode_NE Bone emin) = Bsign Bone

(emin < emax)%Z
unfold emin; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin

(Rabs (round radix2 fexp ZnearestE (B2R Bone * bpow radix2 emin)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
s:bool
Hbemin:round radix2 fexp ZnearestE (bpow radix2 emin) = bpow radix2 emin

(bpow radix2 emin < bpow radix2 emax)%R
apply bpow_lt; unfold emin; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

if Rlt_bool (succ radix2 fexp (B2R (B754_finite sx mx ex Hmex))) (bpow radix2 emax) then B2R (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = succ radix2 fexp (B2R (B754_finite sx mx ex Hmex)) /\ is_finite (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = true /\ Bsign (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = (Bsign (B754_finite sx mx ex Hmex) && is_finite_strict (B754_finite sx mx ex Hmex))%bool else B2FF (Bsucc succ_nan (B754_finite sx mx ex Hmex)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

if Rlt_bool (succ radix2 fexp (B2R (B754_finite true mx ex Hmex))) (bpow radix2 emax) then B2R (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool else B2FF (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
if Rlt_bool (succ radix2 fexp (B2R (B754_finite false mx ex Hmex))) (bpow radix2 emax) then B2R (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = succ radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = true /\ Bsign (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = (Bsign (B754_finite false mx ex Hmex) && is_finite_strict (B754_finite false mx ex Hmex))%bool else B2FF (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

if Rlt_bool (succ radix2 fexp (B2R (B754_finite true mx ex Hmex))) (bpow radix2 emax) then B2R (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool else B2FF (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R

B2R (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(bpow radix2 emax <= succ radix2 fexp (B2R (B754_finite true mx ex Hmex)))%R
B2FF (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R

B2R (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R

(- B2R (Bpred_pos succ_nan (B754_finite false mx ex Hmex)))%R = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bopp succ_nan (Bpred_pos succ_nan (B754_finite false mx ex Hmex))) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan (B754_finite false mx ex Hmex))) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R

(- B2R (Bpred_pos succ_nan (B754_finite false mx ex Hmex)))%R = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bpred_pos succ_nan (B754_finite false mx ex Hmex)) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan (B754_finite false mx ex Hmex))) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float

(- B2R (Bpred_pos succ_nan ox))%R = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:(0 < B2R ox)%R -> B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(- B2R (Bpred_pos succ_nan ox))%R = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:(0 < B2R ox)%R -> B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(0 < B2R ox)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false
(- B2R (Bpred_pos succ_nan ox))%R = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:(0 < B2R ox)%R -> B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(0 < B2R ox)%R
now apply Rmult_lt_0_compat; [apply IZR_lt|apply bpow_gt_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(- B2R (Bpred_pos succ_nan ox))%R = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(- pred_pos radix2 fexp (B2R ox))%R = succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) /\ true = true /\ Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(- pred_pos radix2 fexp (B2R ox))%R = (- pred_pos radix2 fexp (- B2R (B754_finite true mx ex Hmex)))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false
true = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false
Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false
(B2R (B754_finite true mx ex Hmex) < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(- pred_pos radix2 fexp (B2R ox))%R = (- pred_pos radix2 fexp (- B2R (B754_finite true mx ex Hmex)))%R
now unfold B2R, F2R, ox; simpl; rewrite Ropp_mult_distr_l, <-opp_IZR.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

true = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false
Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false
(B2R (B754_finite true mx ex Hmex) < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

true = true
now simpl.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false
(B2R (B754_finite true mx ex Hmex) < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = (Bsign (B754_finite true mx ex Hmex) && is_finite_strict (B754_finite true mx ex Hmex))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

Bsign (Bopp succ_nan (Bpred_pos succ_nan ox)) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

is_nan (Bpred_pos succ_nan ox) = false
now destruct Hpred as (_, (H, _)); revert H; case (Bpred_pos _ _).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(B2R (B754_finite true mx ex Hmex) < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(IZR (- Z.pos mx) * bpow radix2 ex < 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
ox:=B754_finite false mx ex Hmex:binary_float
Hpred:B2R (Bpred_pos succ_nan ox) = pred_pos radix2 fexp (B2R ox) /\ is_finite (Bpred_pos succ_nan ox) = true /\ Bsign (Bpred_pos succ_nan ox) = false

(0 < IZR (Z.pos mx) * bpow radix2 ex)%R
now apply Rmult_lt_0_compat; [apply IZR_lt|apply bpow_gt_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
Hover:(bpow radix2 emax <= succ radix2 fexp (B2R (B754_finite true mx ex Hmex)))%R

B2FF (Bopp succ_nan (Bpred_pos succ_nan (Bopp succ_nan (B754_finite true mx ex Hmex)))) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) <= succ radix2 fexp 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
(succ radix2 fexp 0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(succ radix2 fexp (B2R (B754_finite true mx ex Hmex)) <= succ radix2 fexp 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(B2R (B754_finite true mx ex Hmex) <= 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(IZR (- Z.pos mx) * bpow radix2 ex <= 0)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(0 <= IZR (Z.pos mx) * bpow radix2 ex)%R
now apply Rmult_le_pos; [apply IZR_le|apply bpow_ge_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(succ radix2 fexp 0 < bpow radix2 emax)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

(emin < emax)%Z
unfold emin; unfold Prec_gt_0 in prec_gt_0_; lia.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x0 : binary_float | is_nan x0 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true

if Rlt_bool (succ radix2 fexp (B2R (B754_finite false mx ex Hmex))) (bpow radix2 emax) then B2R (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = succ radix2 fexp (B2R (B754_finite false mx ex Hmex)) /\ is_finite (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = true /\ Bsign (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = (Bsign (B754_finite false mx ex Hmex) && is_finite_strict (B754_finite false mx ex Hmex))%bool else B2FF (Bplus (fun _ : binary_float => succ_nan) mode_NE (B754_finite false mx ex Hmex) (Bulp (B754_finite false mx ex Hmex))) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus (fun _ : binary_float => succ_nan) mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus (fun _ : binary_float => succ_nan) mode_NE x (Bulp x)) = true /\ Bsign (Bplus (fun _ : binary_float => succ_nan) mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus (fun _ : binary_float => succ_nan) mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:is_finite (Bulp x) = true -> if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => match mode_NE with | mode_DN => (Bsign x || Bsign (Bulp x))%bool | _ => (Bsign x && Bsign (Bulp x))%bool end | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)

(0 <= B2R x)%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R
if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)

(0 <= B2R x)%R
now apply Rmult_le_pos; [apply IZR_le|apply bpow_ge_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R

succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R

succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
now unfold succ; rewrite (Rle_bool_true _ _ Px).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (B2R x + B2R (Bulp x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (B2R x + B2R (Bulp x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (round radix2 fexp (round_mode mode_NE) (succ radix2 fexp (B2R x)))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = round radix2 fexp (round_mode mode_NE) (succ radix2 fexp (B2R x)) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (Rabs (succ radix2 fexp (B2R x))) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Hplus:if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R

if Rlt_bool (succ radix2 fexp (B2R x)) (bpow radix2 emax) then B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool else B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(bpow radix2 emax <= succ radix2 fexp (B2R x))%R
Hplus:B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)
B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

Bsign (Bplus plus_nan mode_NE x (Bulp x)) = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

(succ radix2 fexp (B2R x) < 0)%R -> true = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end
succ radix2 fexp (B2R x) = 0%R -> (Bsign x && Bsign (Bulp x))%bool = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end
(0 < succ radix2 fexp (B2R x))%R -> false = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

(succ radix2 fexp (B2R x) < 0)%R -> true = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

(succ radix2 fexp (B2R x) < 0)%R -> False
apply Rle_not_lt, (Rle_trans _ _ _ Px), succ_ge_id.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

succ radix2 fexp (B2R x) = 0%R -> (Bsign x && Bsign (Bulp x))%bool = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end
(0 < succ radix2 fexp (B2R x))%R -> false = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

succ radix2 fexp (B2R x) = 0%R -> (Bsign x && Bsign (Bulp x))%bool = (Bsign x && is_finite_strict x)%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

(0 < succ radix2 fexp (B2R x))%R
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

(0 < B2R x)%R
now apply Rmult_lt_0_compat; [apply IZR_lt|apply bpow_gt_0].
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(succ radix2 fexp (B2R x) < bpow radix2 emax)%R
Hplus:B2R (Bplus plus_nan mode_NE x (Bulp x)) = succ radix2 fexp (B2R x) /\ is_finite (Bplus plus_nan mode_NE x (Bulp x)) = true /\ Bsign (Bplus plus_nan mode_NE x (Bulp x)) = match Rcompare (succ radix2 fexp (B2R x)) 0 with | Eq => (Bsign x && Bsign (Bulp x))%bool | Lt => true | Gt => false end

(0 < succ radix2 fexp (B2R x))%R -> false = (Bsign x && is_finite_strict x)%bool
now simpl.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
Hsucc:succ radix2 fexp 0 = bpow radix2 emin
succ_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
sx:bool
mx:positive
ex:Z
Hmex:bounded mx ex = true
x:=B754_finite false mx ex Hmex:binary_float
plus_nan:=fun _ : binary_float => succ_nan:binary_float -> binary_float -> {x1 : binary_float | is_nan x1 = true}
Hulp:B2R (Bulp x) = ulp radix2 fexp (B2R x) /\ is_finite (Bulp x) = true /\ Bsign (Bulp x) = false
Px:(0 <= B2R x)%R
Hsucc':succ radix2 fexp (B2R x) = (B2R x + ulp radix2 fexp (B2R x))%R
Hover:(bpow radix2 emax <= succ radix2 fexp (B2R x))%R
Hplus:B2FF (Bplus plus_nan mode_NE x (Bulp x)) = binary_overflow mode_NE (Bsign x) /\ Bsign x = Bsign (Bulp x)

B2FF (Bplus plus_nan mode_NE x (Bulp x)) = F754_infinity false
now rewrite (proj1 Hplus). Qed. Definition Bpred pred_nan x := Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x)).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (pred_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite x = true -> if Rlt_bool (- bpow radix2 emax) (pred radix2 fexp (B2R x)) then B2R (Bpred pred_nan x) = pred radix2 fexp (B2R x) /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z

forall (pred_nan : binary_float -> {x0 : binary_float | is_nan x0 = true}) (x : binary_float), is_finite x = true -> if Rlt_bool (- bpow radix2 emax) (pred radix2 fexp (B2R x)) then B2R (Bpred pred_nan x) = pred radix2 fexp (B2R x) /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true

if Rlt_bool (- bpow radix2 emax) (pred radix2 fexp (B2R x)) then B2R (Bpred pred_nan x) = pred radix2 fexp (B2R x) /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true

is_finite (Bopp pred_nan x) = true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
if Rlt_bool (- bpow radix2 emax) (pred radix2 fexp (B2R x)) then B2R (Bpred pred_nan x) = pred radix2 fexp (B2R x) /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true

is_finite (Bopp pred_nan x) = true
now rewrite is_finite_Bopp.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true

if Rlt_bool (- bpow radix2 emax) (pred radix2 fexp (B2R x)) then B2R (Bpred pred_nan x) = pred radix2 fexp (B2R x) /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true

if Rlt_bool (- bpow radix2 emax) (pred radix2 fexp (- B2R (Bopp pred_nan x))) then B2R (Bpred pred_nan x) = pred radix2 fexp (- B2R (Bopp pred_nan x)) /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true

if Rlt_bool (succ radix2 fexp (B2R (Bopp pred_nan x))) (bpow radix2 emax) then B2R (Bpred pred_nan x) = (- succ radix2 fexp (B2R (Bopp pred_nan x)))%R /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true

(if Rlt_bool (succ radix2 fexp (B2R (Bopp pred_nan x))) (bpow radix2 emax) then B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x)) /\ is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true /\ Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool else B2FF (Bsucc pred_nan (Bopp pred_nan x)) = F754_infinity false) -> if Rlt_bool (succ radix2 fexp (B2R (Bopp pred_nan x))) (bpow radix2 emax) then B2R (Bpred pred_nan x) = (- succ radix2 fexp (B2R (Bopp pred_nan x)))%R /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool else B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true

B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x)) /\ is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true /\ Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool -> B2R (Bpred pred_nan x) = (- succ radix2 fexp (B2R (Bopp pred_nan x)))%R /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
B2FF (Bsucc pred_nan (Bopp pred_nan x)) = F754_infinity false -> B2FF (Bpred pred_nan x) = F754_infinity true
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true

B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x)) /\ is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true /\ Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool -> B2R (Bpred pred_nan x) = (- succ radix2 fexp (B2R (Bopp pred_nan x)))%R /\ is_finite (Bpred pred_nan x) = true /\ Bsign (Bpred pred_nan x) = (Bsign x || negb (is_finite_strict x))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

B2R (Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x))) = (- succ radix2 fexp (B2R (Bopp pred_nan x)))%R /\ is_finite (Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x))) = true /\ Bsign (Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x))) = (Bsign x || negb (is_finite_strict x))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

(- succ radix2 fexp (B2R (Bopp pred_nan x)))%R = (- succ radix2 fexp (B2R (Bopp pred_nan x)))%R /\ is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true /\ Bsign (Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x))) = (Bsign x || negb (is_finite_strict x))%bool
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

(- succ radix2 fexp (B2R (Bopp pred_nan x)))%R = (- succ radix2 fexp (B2R (Bopp pred_nan x)))%R /\ is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true /\ Bsign (Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x))) = negb (negb (Bsign x) && is_finite_strict x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

Bsign (Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x))) = negb (negb (Bsign x) && is_finite_strict x)
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

Bsign (Bopp pred_nan (Bsucc pred_nan (Bopp pred_nan x))) = negb (negb (Bsign x) && is_finite_strict (Bopp pred_nan x))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

negb (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x)) = negb (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool
is_nan x = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool
is_nan (Bsucc pred_nan (Bopp pred_nan x)) = false
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

negb (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x)) = negb (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))
now simpl.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

is_nan x = false
now revert Fx; case x.
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true
HR:B2R (Bsucc pred_nan (Bopp pred_nan x)) = succ radix2 fexp (B2R (Bopp pred_nan x))
HF:is_finite (Bsucc pred_nan (Bopp pred_nan x)) = true
HS:Bsign (Bsucc pred_nan (Bopp pred_nan x)) = (Bsign (Bopp pred_nan x) && is_finite_strict (Bopp pred_nan x))%bool

is_nan (Bsucc pred_nan (Bopp pred_nan x)) = false
now revert HF; case (Bsucc _ _).
prec, emax:Z
prec_gt_0_:Prec_gt_0 prec
Hmax:(prec < emax)%Z
emin:=(3 - emax - prec)%Z:Z
fexp:=FLT_exp emin prec:Z -> Z
Hemax:(3 <= emax)%Z
pred_nan:binary_float -> {x1 : binary_float | is_nan x1 = true}
x:binary_float
Fx:is_finite x = true
Fox:is_finite (Bopp pred_nan x) = true

B2FF (Bsucc pred_nan (Bopp pred_nan x)) = F754_infinity false -> B2FF (Bpred pred_nan x) = F754_infinity true
now unfold Bpred; case (Bsucc _ _); intro s; case s. Qed. End Binary.