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.

Locations: where a real number is positioned with respect to its rounded-down value in an arbitrary format.

Require Import Raux Defs Float_prop.
Require Import SpecFloatCompat.

Notation location := location (only parsing).
Notation loc_Exact := loc_Exact (only parsing).
Notation loc_Inexact := loc_Inexact (only parsing).

Section Fcalc_bracket.

Variable d u : R.
Hypothesis Hdu : (d < u)%R.

Variable x : R.

Definition inbetween_loc :=
  match Rcompare x d with
  | Gt => loc_Inexact (Rcompare x ((d + u) / 2))
  | _ => loc_Exact
  end.
Locates a real number with respect to the middle of two other numbers.
Inductive inbetween : location -> Prop :=
  | inbetween_Exact : x = d -> inbetween loc_Exact
  | inbetween_Inexact l : (d < x < u)%R -> Rcompare x ((d + u) / 2)%R = l -> inbetween (loc_Inexact l).

d, u:R
Hdu:(d < u)%R
x:R

(d <= x < u)%R -> inbetween inbetween_loc
d, u:R
Hdu:(d < u)%R
x:R

(d <= x < u)%R -> inbetween inbetween_loc
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R

inbetween inbetween_loc
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R

inbetween match Rcompare x d with | Gt => SpecFloatCopy.loc_Inexact (Rcompare x ((d + u) / 2)) | _ => SpecFloatCopy.loc_Exact end
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:(x < d)%R

inbetween SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:x = d
inbetween SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:(d < x)%R
inbetween (SpecFloatCopy.loc_Inexact (Rcompare x ((d + u) / 2)))
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:x = d

inbetween SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:(d < x)%R
inbetween (SpecFloatCopy.loc_Inexact (Rcompare x ((d + u) / 2)))
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:(d < x)%R

inbetween (SpecFloatCopy.loc_Inexact (Rcompare x ((d + u) / 2)))
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:(d < x)%R

(d < x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:(d < x)%R
Rcompare x ((d + u) / 2) = Rcompare x ((d + u) / 2)
d, u:R
Hdu:(d < u)%R
x:R
Hx:(d <= x < u)%R
H:(d < x)%R

Rcompare x ((d + u) / 2) = Rcompare x ((d + u) / 2)
easy. Qed.
d, u:R
Hdu:(d < u)%R
x:R

forall l l' : SpecFloatCopy.location, inbetween l -> inbetween l' -> l = l'
d, u:R
Hdu:(d < u)%R
x:R

forall l l' : SpecFloatCopy.location, inbetween l -> inbetween l' -> l = l'
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
Hl:inbetween l
Hl':inbetween l'

l = l'
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
H, H0:x = d

SpecFloatCopy.loc_Exact = SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
H:x = d
l0:comparison
H0:(d < x < u)%R
H1:Rcompare x ((d + u) / 2) = l0
SpecFloatCopy.loc_Exact = SpecFloatCopy.loc_Inexact l0
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
H1:x = d
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
l1:comparison
H1:(d < x < u)%R
H2:Rcompare x ((d + u) / 2) = l1
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Inexact l1
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
H:x = d
l0:comparison
H0:(d < x < u)%R
H1:Rcompare x ((d + u) / 2) = l0

SpecFloatCopy.loc_Exact = SpecFloatCopy.loc_Inexact l0
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
H1:x = d
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
l1:comparison
H1:(d < x < u)%R
H2:Rcompare x ((d + u) / 2) = l1
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Inexact l1
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
H:x = d
l0:comparison
H0:(d < d < u)%R
H1:Rcompare x ((d + u) / 2) = l0

SpecFloatCopy.loc_Exact = SpecFloatCopy.loc_Inexact l0
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
H1:x = d
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
l1:comparison
H1:(d < x < u)%R
H2:Rcompare x ((d + u) / 2) = l1
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Inexact l1
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
H1:x = d

SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
l1:comparison
H1:(d < x < u)%R
H2:Rcompare x ((d + u) / 2) = l1
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Inexact l1
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < d < u)%R
H0:Rcompare x ((d + u) / 2) = l0
H1:x = d

SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Exact
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
l1:comparison
H1:(d < x < u)%R
H2:Rcompare x ((d + u) / 2) = l1
SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Inexact l1
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
l1:comparison
H1:(d < x < u)%R
H2:Rcompare x ((d + u) / 2) = l1

SpecFloatCopy.loc_Inexact l0 = SpecFloatCopy.loc_Inexact l1
d, u:R
Hdu:(d < u)%R
x:R
l, l':SpecFloatCopy.location
l0:comparison
H:(d < x < u)%R
H0:Rcompare x ((d + u) / 2) = l0
l1:comparison
H1:(d < x < u)%R
H2:Rcompare x ((d + u) / 2) = l1

l0 = l1
now rewrite <- H0. Qed. Section Fcalc_bracket_any. Variable l : location.
d, u:R
Hdu:(d < u)%R
x:R
l:SpecFloatCopy.location

inbetween l -> (d <= x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l:SpecFloatCopy.location

inbetween l -> (d <= x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
Hx:x = d

(d <= x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l':comparison
Hx:(d < x < u)%R
Hl:Rcompare x ((d + u) / 2) = l'
(d <= x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
Hx:x = d

(d <= d < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l':comparison
Hx:(d < x < u)%R
Hl:Rcompare x ((d + u) / 2) = l'
(d <= x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
Hx:x = d

(d <= d)%R
d, u:R
Hdu:(d < u)%R
x:R
Hx:x = d
(d < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l':comparison
Hx:(d < x < u)%R
Hl:Rcompare x ((d + u) / 2) = l'
(d <= x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
Hx:x = d

(d < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l':comparison
Hx:(d < x < u)%R
Hl:Rcompare x ((d + u) / 2) = l'
(d <= x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l':comparison
Hx:(d < x < u)%R
Hl:Rcompare x ((d + u) / 2) = l'

(d <= x < u)%R
now split ; try apply Rlt_le. Qed.
d, u:R
Hdu:(d < u)%R
x:R
l:SpecFloatCopy.location

inbetween l -> l <> SpecFloatCopy.loc_Exact -> (d < x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l:SpecFloatCopy.location

inbetween l -> l <> SpecFloatCopy.loc_Exact -> (d < x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l:SpecFloatCopy.location
Hx:x = d
H:SpecFloatCopy.loc_Exact <> SpecFloatCopy.loc_Exact

(d < x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l:SpecFloatCopy.location
l':comparison
Hx:(d < x < u)%R
Hl:Rcompare x ((d + u) / 2) = l'
H:SpecFloatCopy.loc_Inexact l' <> SpecFloatCopy.loc_Exact
(d < x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l:SpecFloatCopy.location
l':comparison
Hx:(d < x < u)%R
Hl:Rcompare x ((d + u) / 2) = l'
H:SpecFloatCopy.loc_Inexact l' <> SpecFloatCopy.loc_Exact

(d < x < u)%R
exact Hx. Qed. End Fcalc_bracket_any.
d, u:R
Hdu:(d < u)%R
x:R

forall l : comparison, inbetween (SpecFloatCopy.loc_Inexact l) -> Rcompare (x - d) (u - x) = l
d, u:R
Hdu:(d < u)%R
x:R

forall l : comparison, inbetween (SpecFloatCopy.loc_Inexact l) -> Rcompare (x - d) (u - x) = l
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

Rcompare (x - d) (u - x) = l
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl':(d < x < u)%R
Hx:Rcompare x ((d + u) / 2) = l

Rcompare (x - d) (u - x) = l
now rewrite Rcompare_middle. Qed.
d, u:R
Hdu:(d < u)%R
x:R

forall l : comparison, inbetween (SpecFloatCopy.loc_Inexact l) -> Rcompare (Rabs (d - x)) (Rabs (u - x)) = l
d, u:R
Hdu:(d < u)%R
x:R

forall l : comparison, inbetween (SpecFloatCopy.loc_Inexact l) -> Rcompare (Rabs (d - x)) (Rabs (u - x)) = l
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

Rcompare (Rabs (d - x)) (Rabs (u - x)) = l
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

Rcompare (- (d - x)) (Rabs (u - x)) = l
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(d - x <= 0)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

Rcompare (- (d - x)) (u - x) = l
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(0 <= u - x)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(d - x <= 0)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

Rcompare (x - d) (u - x) = l
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(0 <= u - x)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(d - x <= 0)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

(0 <= u - x)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(d - x <= 0)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

(x <= u)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(d - x <= 0)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

(x < u)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)
(d - x <= 0)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

(d - x <= 0)%R
d, u:R
Hdu:(d < u)%R
x:R
l:comparison
Hl:inbetween (SpecFloatCopy.loc_Inexact l)

(d <= x)%R
apply (inbetween_bounds _ Hl). Qed. End Fcalc_bracket.

forall (d u : R) (l : SpecFloatCopy.location), (d < u)%R -> exists x : R, inbetween d u x l

forall (d u : R) (l : SpecFloatCopy.location), (d < u)%R -> exists x : R, inbetween d u x l
d, u:R
Hdu:(d < u)%R

exists x : R, inbetween d u x SpecFloatCopy.loc_Exact
d, u:R
l:comparison
Hdu:(d < u)%R
exists x : R, inbetween d u x (SpecFloatCopy.loc_Inexact l)
d, u:R
Hdu:(d < u)%R

inbetween d u d SpecFloatCopy.loc_Exact
d, u:R
l:comparison
Hdu:(d < u)%R
exists x : R, inbetween d u x (SpecFloatCopy.loc_Inexact l)
d, u:R
l:comparison
Hdu:(d < u)%R

exists x : R, inbetween d u x (SpecFloatCopy.loc_Inexact l)
d, u:R
l:comparison
Hdu:(d < u)%R

inbetween d u (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) (SpecFloatCopy.loc_Inexact l)
d, u:R
l:comparison
Hdu:(d < u)%R

(d < d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
(* *)
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(0 < v < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(0 < v)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
(v < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(0 < match l with | Eq => 2 | Lt => 1 | Gt => 3 end * / 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
(v < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(0 < match l with | Eq => 2 | Lt => 1 | Gt => 3 end)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
(0 < / 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
(v < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(0 < / 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
(v < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(0 < 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
(v < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(v < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(match l with | Eq => 2 | Lt => 1 | Gt => 3 end * / 4 < 1)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(0 < 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
(match l with | Eq => 2 | Lt => 1 | Gt => 3 end * / 4 * 4 < 1 * 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(match l with | Eq => 2 | Lt => 1 | Gt => 3 end * / 4 * 4 < 1 * 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(match l with | Eq => 2 | Lt => 1 | Gt => 3 end * 1 < 1 * 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
4%R <> 0%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(match l with | Eq => 2 | Lt => 1 | Gt => 3 end < 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
4%R <> 0%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

4%R <> 0%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R

(4 > 0)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d < d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d < d + v * (u - d))%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d + d * (v - 1) < d + v * (u - d) + d * (v - 1))%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d * v < v * u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(v * d < v * u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d + v * (u - d) < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(- u * v + (d + v * (u - d)) < - u * v + u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d * (1 - v) < - u * v + u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d * (1 - v) < u * (1 - v))%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(0 < 1 - v)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(0 + v < 1 - v + v)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R
(d < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=(match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4)%R:R
H:(0 < v < 1)%R

(d < u)%R
d, u:R
l:comparison
Hdu:(d < u)%R
Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R

Rcompare (d + match l with | Eq => 2 | Lt => 1 | Gt => 3 end / 4 * (u - d)) ((d + u) / 2) = l
(* *)
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare (d + v / 4 * (u - d)) ((d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare (d + v / 4 * (u - d) + - (d + u) / 2) ((d + u) / 2 + - (d + u) / 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare ((d + v / 4 * (u - d) + - (d + u) / 2) * 4) (((d + u) / 2 + - (d + u) / 2) * 4) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R
(0 < 4)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare ((d + v / 4 * (u - d) + - (d + u) / 2) * 4) (((d + u) / 2 + - (d + u) / 2) * 4) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare ((d + v / 4 * (u - d) + - (d + u) / 2) * 4) ((u - d) * 0) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare ((u - d) * (v - 2)) ((u - d) * 0) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare (v - 2) 0 = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R
(0 < u - d)%R
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare (v - 2) 0 = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare (v - 2 + 2) (0 + 2) = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare v 2 = l
d, u:R
l:comparison
Hdu:(d < u)%R
v:=match l with | Eq => 2%R | Lt => 1%R | Gt => 3%R end:R

Rcompare match l with | Eq => 2 | Lt => 1 | Gt => 3 end 2 = l
case l ; apply Rcompare_IZR. Qed. Section Fcalc_bracket_step. Variable start step : R. Variable nb_steps : Z. Variable Hstep : (0 < step)%R.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R

forall k : Z, (start + IZR k * step < start + IZR (k + 1) * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R

forall k : Z, (start + IZR k * step < start + IZR (k + 1) * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
k:Z

(start + IZR k * step < start + IZR (k + 1) * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
k:Z

(IZR k * step < IZR (k + 1) * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
k:Z

(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
k:Z
(IZR k < IZR (k + 1))%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
k:Z

(IZR k < IZR (k + 1))%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
k:Z

(k < k + 1)%Z
apply Zlt_succ. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R

forall k : Z, ((start + (start + IZR k * step)) / 2)%R = (start + IZR k / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R

forall k : Z, ((start + (start + IZR k * step)) / 2)%R = (start + IZR k / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
k:Z

((start + (start + IZR k * step)) / 2)%R = (start + IZR k / 2 * step)%R
field. Qed. Hypothesis (Hnb_steps : (1 < nb_steps)%Z).
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location) (l' : comparison), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> (0 < k < nb_steps)%Z -> Rcompare x (start + IZR nb_steps / 2 * step) = l' -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l')
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location) (l' : comparison), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> (0 < k < nb_steps)%Z -> Rcompare x (start + IZR nb_steps / 2 * step) = l' -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l')
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l')
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'

(start < x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
(* . *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start < x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start < x)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start < start + IZR k * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start + 0 < start + IZR k * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(0 < IZR k * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(0 < IZR k)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start + IZR (k + 1) * step <= start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(IZR (k + 1) * step <= IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(0 <= step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(IZR (k + 1) <= IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(IZR (k + 1) <= IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(k + 1 <= nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
l':comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk:(0 < k < nb_steps)%Z
Hl':Rcompare x (start + IZR nb_steps / 2 * step) = l'

Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = l'
(* . *) now rewrite middle_range. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> (0 < k)%Z -> (2 * k + 1 < nb_steps)%Z -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> (0 < k)%Z -> (2 * k + 1 < nb_steps)%Z -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z

(0 < k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Rcompare x (start + IZR nb_steps / 2 * step) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z

Rcompare x (start + IZR nb_steps / 2 * step) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z

(x < start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(x < start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start + IZR (k + 1) * step <= start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

Rcompare (start + IZR nb_steps / 2 * step) (start + IZR (k + 1) * step) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

Rcompare (IZR nb_steps) (2 * IZR (k + 1)) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(2 * IZR (k + 1) <= IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(IZR (2 * (k + 1)) <= IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(2 * (k + 1) <= nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(0 < k)%Z
Hk2:(2 * k + 1 < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(0 < step)%R
exact Hstep. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> (nb_steps < 2 * k)%Z -> (k < nb_steps)%Z -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> (nb_steps < 2 * k)%Z -> (k < nb_steps)%Z -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z

(0 < k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Rcompare x (start + IZR nb_steps / 2 * step) = Gt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z

Rcompare x (start + IZR nb_steps / 2 * step) = Gt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z

(start + IZR nb_steps / 2 * step < x)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start + IZR nb_steps / 2 * step < x)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(start + IZR nb_steps / 2 * step < start + IZR k * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

Rcompare (start + IZR nb_steps / 2 * step) (start + IZR k * step) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

Rcompare (IZR nb_steps) (2 * IZR k) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(IZR nb_steps < 2 * IZR k)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(IZR nb_steps < IZR (2 * k))%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(nb_steps < 2 * k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk1:(nb_steps < 2 * k)%Z
Hk2:(k < nb_steps)%Z
Hx':(start + IZR k * step <= x < start + IZR (k + 1) * step)%R

(0 < step)%R
exact Hstep. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (l : SpecFloatCopy.location), inbetween start (start + step) x l -> l <> SpecFloatCopy.loc_Exact -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (l : SpecFloatCopy.location), inbetween start (start + step) x l -> l <> SpecFloatCopy.loc_Exact -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(start < x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
(* . *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(start < x)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(x < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(start + step < start + IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(step < IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(1 * step < IZR nb_steps * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
(1 < IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(1 < IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

Rcompare x ((start + (start + IZR nb_steps * step)) / 2) = Lt
(* . *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(x < (start + (start + IZR nb_steps * step)) / 2)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(start + step <= (start + (start + IZR nb_steps * step)) / 2)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(start + step <= start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

Rcompare (start + IZR nb_steps / 2 * step) (start + step) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

Rcompare (start + IZR nb_steps / 2 * step) (start + 1 * step) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

Rcompare (IZR nb_steps) (2 * 1) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

Rcompare (IZR nb_steps) 2 <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(2 <= IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(2 <= nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
l:SpecFloatCopy.location
Hx:inbetween start (start + step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hx':(start < x < start + step)%R

(0 < step)%R
exact Hstep. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall k : Z, (2 * k + 1)%Z = nb_steps -> ((start + IZR k * step + (start + IZR (k + 1) * step)) / 2)%R = (start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall k : Z, (2 * k + 1)%Z = nb_steps -> ((start + IZR k * step + (start + IZR (k + 1) * step)) / 2)%R = (start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
k:Z
Hk:(2 * k + 1)%Z = nb_steps

((start + IZR k * step + (start + IZR (k + 1) * step)) / 2)%R = (start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
k:Z
Hk:(2 * k + 1)%Z = nb_steps

((start + IZR k * step + (start + IZR (k + 1) * step)) / 2)%R = (start + IZR (2 * k + 1) / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
k:Z
Hk:(2 * k + 1)%Z = nb_steps

((start + IZR k * step + (start + (IZR k + 1) * step)) / 2)%R = (start + (2 * IZR k + 1) / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
k:Z
Hk:(2 * k + 1)%Z = nb_steps

((start + IZR k * step + (start + (IZR k + 1) * step)) / 2)%R = (start + (2 * IZR k + 1) / 2 * step)%R
field. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : comparison), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact l) -> (2 * k + 1)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : comparison), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact l) -> (2 * k + 1)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact l)
Hk:(2 * k + 1)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact l)
Hk:(2 * k + 1)%Z = nb_steps

(0 < k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact l)
Hk:(2 * k + 1)%Z = nb_steps
Rcompare x (start + IZR nb_steps / 2 * step) = l
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:comparison
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact l)
Hk:(2 * k + 1)%Z = nb_steps

Rcompare x (start + IZR nb_steps / 2 * step) = l
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:comparison
Hk:(2 * k + 1)%Z = nb_steps
Hl:Rcompare x ((start + IZR k * step + (start + IZR (k + 1) * step)) / 2) = l

Rcompare x (start + IZR nb_steps / 2 * step) = l
now rewrite (middle_odd _ Hk) in Hl. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact -> (2 * k + 1)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact -> (2 * k + 1)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k + 1)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k + 1)%Z = nb_steps

(0 < k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k + 1)%Z = nb_steps
Rcompare x (start + IZR nb_steps / 2 * step) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k + 1)%Z = nb_steps

Rcompare x (start + IZR nb_steps / 2 * step) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

Rcompare x (start + IZR nb_steps / 2 * step) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

Rcompare (start + IZR k * step) (start + IZR nb_steps / 2 * step) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

Rcompare (2 * IZR k) (IZR nb_steps) = Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

(2 * IZR k < IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

(IZR (2 * k) < IZR nb_steps)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

(2 * k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

(2 * k < 2 * k + 1)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k + 1)%Z = nb_steps
Hl:x = (start + IZR k * step)%R

(0 < step)%R
exact Hstep. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> l <> SpecFloatCopy.loc_Exact -> (2 * k)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> l <> SpecFloatCopy.loc_Exact -> (2 * k)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

(0 < k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Rcompare x (start + IZR nb_steps / 2 * step) = Gt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

Rcompare x (start + IZR nb_steps / 2 * step) = Gt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

(start + IZR nb_steps / 2 * step < x)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

(start + IZR nb_steps / 2 * step < x)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

(start + IZR nb_steps / 2 * step <= start + IZR k * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

Rcompare (start + IZR k * step) (start + IZR nb_steps / 2 * step) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

Rcompare (2 * IZR k) (IZR nb_steps) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

Rcompare (IZR (2 * k)) (IZR nb_steps) <> Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

(IZR nb_steps <= IZR (2 * k))%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

(nb_steps <= 2 * k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

(nb_steps <= nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R
(0 < step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hl:l <> SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Hx':(start + IZR k * step < x < start + IZR (k + 1) * step)%R

(0 < step)%R
exact Hstep. Qed.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact -> (2 * k)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Eq)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z), inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact -> (2 * k)%Z = nb_steps -> inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Eq)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Eq)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

(0 < k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps
Rcompare x (start + IZR nb_steps / 2 * step) = Eq
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

Rcompare x (start + IZR nb_steps / 2 * step) = Eq
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk:(2 * k)%Z = nb_steps

x = (start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k)%Z = nb_steps
Hx':x = (start + IZR k * step)%R

x = (start + IZR nb_steps / 2 * step)%R
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
Hk:(2 * k)%Z = nb_steps
Hx':x = (start + IZR k * step)%R

(start + IZR k * step)%R = (start + 2 * IZR k / 2 * step)%R
field. Qed.
Computes a new location when the interval containing a real number is split into nb_steps subintervals and the real is in the k-th one. (Even radix.)
Definition new_location_even k l :=
  if Zeq_bool k 0 then
    match l with loc_Exact => l | _ => loc_Inexact Lt end
  else
    loc_Inexact
    match Z.compare (2 * k) nb_steps with
    | Lt => Lt
    | Eq => match l with loc_Exact => Eq | _ => Gt end
    | Gt => Gt
    end.

start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

Z.even nb_steps = true -> forall (x : R) (k : Z) (l : SpecFloatCopy.location), (0 <= k < nb_steps)%Z -> inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> inbetween start (start + IZR nb_steps * step) x (new_location_even k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

Z.even nb_steps = true -> forall (x : R) (k : Z) (l : SpecFloatCopy.location), (0 <= k < nb_steps)%Z -> inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> inbetween start (start + IZR nb_steps * step) x (new_location_even k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

inbetween start (start + IZR nb_steps * step) x (new_location_even k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

inbetween start (start + IZR nb_steps * step) x (if Zeq_bool k 0 then match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end else SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k = 0%Z

inbetween start (start + IZR nb_steps * step) x match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
(* k = 0 *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + 0 * step) (start + IZR (0 + 1) * step) x l
Hk0:k = 0%Z

inbetween start (start + IZR nb_steps * step) x match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z

inbetween start (start + IZR nb_steps * step) x match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location

inbetween start (start + IZR nb_steps * step) x l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location

l = SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Exact \/ l <> SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Inexact Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H:l = SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Exact \/ l <> SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H:l = SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Exact \/ l <> SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Inexact Lt

inbetween start (start + IZR nb_steps * step) x l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l = SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Exact

inbetween start (start + IZR nb_steps * step) x SpecFloatCopy.loc_Exact
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l = SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Exact

x = start
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x SpecFloatCopy.loc_Exact
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l = SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Exact

x = start
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end | Lt => Lt | Gt => Gt end)
(* k <> 0 *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k < nb_steps)%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
(* . 2 * k < nb_steps *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k < nb_steps)%Z

(0 < k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k < nb_steps)%Z
(2 * k + 1 < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k < nb_steps)%Z

(2 * k + 1 < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k < nb_steps)%Z
x0:Z
H:nb_steps = (2 * x0 + (if Z.even nb_steps then 0 else 1))%Z

(2 * k + 1 < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k < nb_steps)%Z
x0:Z
H:nb_steps = (2 * x0 + 0)%Z

(2 * k + 1 < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
(* . 2 * k = nb_steps *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l')
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison

l = SpecFloatCopy.loc_Exact /\ l' = Eq \/ l <> SpecFloatCopy.loc_Exact /\ l' = Gt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison
H:l = SpecFloatCopy.loc_Exact /\ l' = Eq \/ l <> SpecFloatCopy.loc_Exact /\ l' = Gt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l')
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison
H:l = SpecFloatCopy.loc_Exact /\ l' = Eq \/ l <> SpecFloatCopy.loc_Exact /\ l' = Gt

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact l')
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison
H1:l = SpecFloatCopy.loc_Exact
H2:l' = Eq

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Eq)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = Gt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison
H1:l = SpecFloatCopy.loc_Exact
H2:l' = Eq

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Eq)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = Gt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k)%Z = nb_steps
l':=match l with | SpecFloatCopy.loc_Exact => Eq | SpecFloatCopy.loc_Inexact _ => Gt end:comparison
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = Gt

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
(* . 2 * k > nb_steps *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z

(nb_steps < 2 * k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z
(k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
He:Z.even nb_steps = true
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k)%Z

(k < nb_steps)%Z
apply Hk. Qed.
Computes a new location when the interval containing a real number is split into nb_steps subintervals and the real is in the k-th one. (Odd radix.)
Definition new_location_odd k l :=
  if Zeq_bool k 0 then
    match l with loc_Exact => l | _ => loc_Inexact Lt end
  else
    loc_Inexact
    match Z.compare (2 * k + 1) nb_steps with
    | Lt => Lt
    | Eq => match l with loc_Inexact l => l | loc_Exact => Lt end
    | Gt => Gt
    end.

start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

Z.even nb_steps = false -> forall (x : R) (k : Z) (l : SpecFloatCopy.location), (0 <= k < nb_steps)%Z -> inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> inbetween start (start + IZR nb_steps * step) x (new_location_odd k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

Z.even nb_steps = false -> forall (x : R) (k : Z) (l : SpecFloatCopy.location), (0 <= k < nb_steps)%Z -> inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> inbetween start (start + IZR nb_steps * step) x (new_location_odd k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

inbetween start (start + IZR nb_steps * step) x (new_location_odd k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

inbetween start (start + IZR nb_steps * step) x (if Zeq_bool k 0 then match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end else SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k = 0%Z

inbetween start (start + IZR nb_steps * step) x match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
(* k = 0 *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + 0 * step) (start + IZR (0 + 1) * step) x l
Hk0:k = 0%Z

inbetween start (start + IZR nb_steps * step) x match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z

inbetween start (start + IZR nb_steps * step) x match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location

inbetween start (start + IZR nb_steps * step) x l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location

l = SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Exact \/ l <> SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Inexact Lt
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H:l = SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Exact \/ l <> SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H:l = SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Exact \/ l <> SpecFloatCopy.loc_Exact /\ l' = SpecFloatCopy.loc_Inexact Lt

inbetween start (start + IZR nb_steps * step) x l'
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l = SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Exact

inbetween start (start + IZR nb_steps * step) x SpecFloatCopy.loc_Exact
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l = SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Exact

x = start
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x SpecFloatCopy.loc_Exact
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l = SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Exact

x = start
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween start (start + step) x l
Hk0:k = 0%Z
l':=match l with | SpecFloatCopy.loc_Exact => l | SpecFloatCopy.loc_Inexact _ => SpecFloatCopy.loc_Inexact Lt end:SpecFloatCopy.location
H1:l <> SpecFloatCopy.loc_Exact
H2:l' = SpecFloatCopy.loc_Inexact Lt

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match (2 * k + 1 ?= nb_steps)%Z with | Eq => match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end | Lt => Lt | Gt => Gt end)
(* k <> 0 *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k + 1 < nb_steps)%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k + 1)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
(* . 2 * k + 1 < nb_steps *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k + 1 < nb_steps)%Z

(0 < k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k + 1)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(2 * k + 1)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact match l with | SpecFloatCopy.loc_Exact => Lt | SpecFloatCopy.loc_Inexact l0 => l0 end)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
(* . 2 * k + 1 = nb_steps *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x SpecFloatCopy.loc_Exact
Hk0:k <> 0%Z
Hk1:(2 * k + 1)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Lt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
c:comparison
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact c)
Hk0:k <> 0%Z
Hk1:(2 * k + 1)%Z = nb_steps
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact c)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
c:comparison
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x (SpecFloatCopy.loc_Inexact c)
Hk0:k <> 0%Z
Hk1:(2 * k + 1)%Z = nb_steps

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact c)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z

inbetween start (start + IZR nb_steps * step) x (SpecFloatCopy.loc_Inexact Gt)
(* . 2 * k + 1 > nb_steps *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z

(nb_steps < 2 * k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
(k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
x0:Z
H:nb_steps = (2 * x0 + (if Z.even nb_steps then 0 else 1))%Z

(nb_steps < 2 * k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
(k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
x0:Z
H:nb_steps = (2 * x0 + 1)%Z

(nb_steps < 2 * k)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z
(k < nb_steps)%Z
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
Ho:Z.even nb_steps = false
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hk0:k <> 0%Z
Hk1:(nb_steps < 2 * k + 1)%Z

(k < nb_steps)%Z
apply Hk. Qed. Definition new_location := if Z.even nb_steps then new_location_even else new_location_odd.
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), (0 <= k < nb_steps)%Z -> inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> inbetween start (start + IZR nb_steps * step) x (new_location k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z

forall (x : R) (k : Z) (l : SpecFloatCopy.location), (0 <= k < nb_steps)%Z -> inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l -> inbetween start (start + IZR nb_steps * step) x (new_location k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

inbetween start (start + IZR nb_steps * step) x (new_location k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

inbetween start (start + IZR nb_steps * step) x ((if Z.even nb_steps then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

nb_steps = nb_steps -> (0 < nb_steps)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even nb_steps then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

nb_steps = 0%Z -> (0 < 0)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even 0 then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.pos p -> (0 < Z.pos p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.pos p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

forall p : positive, nb_steps = Z.pos p -> (0 < Z.pos p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.pos p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
(* . *)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
p:positive
Hp:nb_steps = Z.pos p~1

inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.pos p~1) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
p:positive
Hp:nb_steps = Z.pos p~0
inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.pos p~0) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hp:nb_steps = 1%Z
inbetween start (start + IZR nb_steps * step) x ((if Z.even 1 then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
p:positive
Hp:nb_steps = Z.pos p~1

Z.even nb_steps = false
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
p:positive
Hp:nb_steps = Z.pos p~0
inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.pos p~0) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hp:nb_steps = 1%Z
inbetween start (start + IZR nb_steps * step) x ((if Z.even 1 then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
p:positive
Hp:nb_steps = Z.pos p~0

inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.pos p~0) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hp:nb_steps = 1%Z
inbetween start (start + IZR nb_steps * step) x ((if Z.even 1 then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
p:positive
Hp:nb_steps = Z.pos p~0

Z.even nb_steps = true
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hp:nb_steps = 1%Z
inbetween start (start + IZR nb_steps * step) x ((if Z.even 1 then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
Hp:nb_steps = 1%Z

inbetween start (start + IZR nb_steps * step) x ((if Z.even 1 then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l
forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
start, step:R
nb_steps:Z
Hstep:(0 < step)%R
Hnb_steps:(1 < nb_steps)%Z
x:R
k:Z
l:SpecFloatCopy.location
Hk:(0 <= k < nb_steps)%Z
Hx:inbetween (start + IZR k * step) (start + IZR (k + 1) * step) x l

forall p : positive, nb_steps = Z.neg p -> (0 < Z.neg p)%Z -> inbetween start (start + IZR nb_steps * step) x ((if Z.even (Z.neg p) then new_location_even else new_location_odd) k l)
(* . *) now intros p _. Qed. End Fcalc_bracket_step. Section Fcalc_bracket_scale.

forall x d s : R, ((x * s + d * s) / 2)%R = ((x + d) / 2 * s)%R

forall x d s : R, ((x * s + d * s) / 2)%R = ((x + d) / 2 * s)%R
x, d, s:R

((x * s + d * s) / 2)%R = ((x + d) / 2 * s)%R
field. Qed.

forall (x d u : R) (l : SpecFloatCopy.location) (s : R), (0 < s)%R -> inbetween x d u l -> inbetween (x * s) (d * s) (u * s) l

forall (x d u : R) (l : SpecFloatCopy.location) (s : R), (0 < s)%R -> inbetween x d u l -> inbetween (x * s) (d * s) (u * s) l
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
Hx:u = x

(u * s)%R = (x * s)%R
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x < u < d)%R
Hl:Rcompare u ((x + d) / 2) = l'
(x * s < u * s < d * s)%R
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x < u < d)%R
Hl:Rcompare u ((x + d) / 2) = l'
Rcompare (u * s) ((x * s + d * s) / 2) = l'
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x < u < d)%R
Hl:Rcompare u ((x + d) / 2) = l'

(x * s < u * s < d * s)%R
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x < u < d)%R
Hl:Rcompare u ((x + d) / 2) = l'
Rcompare (u * s) ((x * s + d * s) / 2) = l'
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x < u < d)%R
Hl:Rcompare u ((x + d) / 2) = l'

Rcompare (u * s) ((x * s + d * s) / 2) = l'
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x < u < d)%R
Hl:Rcompare u ((x + d) / 2) = l'

Rcompare (u * s) ((x + d) / 2 * s) = l'
now rewrite Rcompare_mult_r. Qed.

forall (x d u : R) (l : SpecFloatCopy.location) (s : R), (0 < s)%R -> inbetween (x * s) (d * s) (u * s) l -> inbetween x d u l

forall (x d u : R) (l : SpecFloatCopy.location) (s : R), (0 < s)%R -> inbetween (x * s) (d * s) (u * s) l -> inbetween x d u l
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
Hx:(u * s)%R = (x * s)%R

u = x
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'
(x < u < d)%R
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'
Rcompare u ((x + d) / 2) = l'
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
Hx:(u * s)%R = (x * s)%R

s <> 0%R
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'
(x < u < d)%R
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'
Rcompare u ((x + d) / 2) = l'
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'

(x < u < d)%R
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'
Rcompare u ((x + d) / 2) = l'
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'

Rcompare u ((x + d) / 2) = l'
x, d, u:R
l:SpecFloatCopy.location
s:R
Hs:(0 < s)%R
l':comparison
Hx:(x * s < u * s < d * s)%R
Hl:Rcompare (u * s) ((x * s + d * s) / 2) = l'

Rcompare (u * s) ((x + d) / 2 * s) = l'
now rewrite inbetween_mult_aux in Hl. Qed. End Fcalc_bracket_scale. Section Fcalc_bracket_generic. Variable beta : radix. Notation bpow e := (bpow beta e).
Specialization of inbetween for two consecutive floating-point numbers.
Definition inbetween_float m e x l :=
  inbetween (F2R (Float beta m e)) (F2R (Float beta (m + 1) e)) x l.

beta:radix

forall (x : R) (m e : Z) (l : SpecFloatCopy.location), inbetween_float m e x l -> (F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix

forall (x : R) (m e : Z) (l : SpecFloatCopy.location), inbetween_float m e x l -> (F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:x = F2R {| Fnum := m; Fexp := e |}

(F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'
(F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:x = F2R {| Fnum := m; Fexp := e |}

(F2R {| Fnum := m; Fexp := e |} <= F2R {| Fnum := m; Fexp := e |} < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'
(F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:x = F2R {| Fnum := m; Fexp := e |}

(F2R {| Fnum := m; Fexp := e |} <= F2R {| Fnum := m; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:x = F2R {| Fnum := m; Fexp := e |}
(F2R {| Fnum := m; Fexp := e |} < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'
(F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:x = F2R {| Fnum := m; Fexp := e |}

(F2R {| Fnum := m; Fexp := e |} < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'
(F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:x = F2R {| Fnum := m; Fexp := e |}

(m < m + 1)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'
(F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'

(F2R {| Fnum := m; Fexp := e |} <= x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'

(F2R {| Fnum := m; Fexp := e |} <= x)%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'
(x < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
l':comparison
Hx:(F2R {| Fnum := m; Fexp := e |} < x < F2R {| Fnum := m + 1; Fexp := e |})%R
Hl:Rcompare x ((F2R {| Fnum := m; Fexp := e |} + F2R {| Fnum := m + 1; Fexp := e |}) / 2) = l'

(x < F2R {| Fnum := m + 1; Fexp := e |})%R
apply Hx. Qed.
Specialization of inbetween for two consecutive integers.
Definition inbetween_int m x l :=
  inbetween (IZR m) (IZR (m + 1)) x l.

beta:radix

forall (x : R) (m e : Z) (l : SpecFloatCopy.location) (k : Z), (0 < k)%Z -> inbetween_float m e x l -> inbetween_float (m / beta ^ k) (e + k) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix

forall (x : R) (m e : Z) (l : SpecFloatCopy.location) (k : Z), (0 < k)%Z -> inbetween_float m e x l -> inbetween_float (m / beta ^ k) (e + k) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween_float m e x l

inbetween_float (m / beta ^ k) (e + k) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l

inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l

forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
e, k:Z
Hk:(0 < k)%Z

forall m : Z, F2R {| Fnum := m; Fexp := e + k |} = F2R {| Fnum := m * beta ^ k; Fexp := e |}
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
e, k:Z
Hk:(0 < k)%Z
m:Z

F2R {| Fnum := m; Fexp := e + k |} = F2R {| Fnum := m * beta ^ k; Fexp := e |}
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
e, k:Z
Hk:(0 < k)%Z
m:Z

F2R {| Fnum := m * beta ^ (e + k - e); Fexp := e |} = F2R {| Fnum := m * beta ^ k; Fexp := e |}
beta:radix
e, k:Z
Hk:(0 < k)%Z
m:Z
(e <= e + k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
e, k:Z
Hk:(0 < k)%Z
m:Z

(e + k - e)%Z = k
beta:radix
e, k:Z
Hk:(0 < k)%Z
m:Z
(e <= e + k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
e, k:Z
Hk:(0 < k)%Z
m:Z

(e <= e + k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}

inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}

(beta ^ k > 0)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}

(0 < beta ^ k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}

(0 <= k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (F2R {| Fnum := m / beta ^ k; Fexp := e + k |}) (F2R {| Fnum := m / beta ^ k + 1; Fexp := e + k |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
(* . *)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (F2R {| Fnum := m / beta ^ k * beta ^ k; Fexp := e |}) (F2R {| Fnum := (m / beta ^ k + 1) * beta ^ k; Fexp := e |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (F2R {| Fnum := m / beta ^ k * beta ^ k; Fexp := e |}) (F2R {| Fnum := m / beta ^ k * beta ^ k + beta ^ k; Fexp := e |}) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (F2R {| Fnum := m / beta ^ k * beta ^ k; Fexp := e |}) (IZR (Fnum {| Fnum := m / beta ^ k * beta ^ k + beta ^ k; Fexp := e |}) * bpow (Fexp {| Fnum := m / beta ^ k * beta ^ k + beta ^ k; Fexp := e |})) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (F2R {| Fnum := m / beta ^ k * beta ^ k; Fexp := e |}) (IZR (m / beta ^ k * beta ^ k + beta ^ k) * bpow e) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (F2R {| Fnum := m / beta ^ k * beta ^ k; Fexp := e |}) (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (beta ^ k) * bpow e) x (new_location (beta ^ k) (m mod beta ^ k) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

(0 < bpow e)%R
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
(1 < beta ^ k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
(0 <= m mod beta ^ k < beta ^ k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
inbetween (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k) * bpow e) (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k + 1) * bpow e) x l
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

(1 < beta ^ k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
(0 <= m mod beta ^ k < beta ^ k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
inbetween (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k) * bpow e) (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k + 1) * bpow e) x l
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

(0 <= m mod beta ^ k < beta ^ k)%Z
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z
inbetween (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k) * bpow e) (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k + 1) * bpow e) x l
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k) * bpow e) (IZR (m / beta ^ k * beta ^ k) * bpow e + IZR (m mod beta ^ k + 1) * bpow e) x l
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (IZR (m / beta ^ k * beta ^ k + m mod beta ^ k) * bpow e) (IZR (m / beta ^ k * beta ^ k + (m mod beta ^ k + 1)) * bpow e) x l
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
k:Z
Hk:(0 < k)%Z
Hx:inbetween (F2R {| Fnum := m; Fexp := e |}) (F2R {| Fnum := m + 1; Fexp := e |}) x l
Hr:forall m0 : Z, F2R {| Fnum := m0; Fexp := e + k |} = F2R {| Fnum := m0 * beta ^ k; Fexp := e |}
Hp:(beta ^ k > 0)%Z

inbetween (IZR (beta ^ k * (m / beta ^ k) + m mod beta ^ k) * bpow e) (IZR (beta ^ k * (m / beta ^ k) + m mod beta ^ k + 1) * bpow e) x l
now rewrite <- Z_div_mod_eq. Qed.
beta:radix

forall (x : R) (m e : Z) (l : SpecFloatCopy.location), inbetween_float m e x l -> inbetween_float (m / beta) (e + 1) x (new_location beta (m mod beta) l)
beta:radix

forall (x : R) (m e : Z) (l : SpecFloatCopy.location), inbetween_float m e x l -> inbetween_float (m / beta) (e + 1) x (new_location beta (m mod beta) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:inbetween_float m e x l

inbetween_float (m / beta) (e + 1) x (new_location beta (m mod beta) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:inbetween_float m e x l

inbetween_float (m / beta ^ 1) (e + 1) x (new_location (beta ^ 1) (m mod beta ^ 1) l)
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:inbetween_float m e x l
(beta ^ 1)%Z = beta
beta:radix
x:R
m, e:Z
l:SpecFloatCopy.location
Hx:inbetween_float m e x l

(beta ^ 1)%Z = beta
apply Zmult_1_r. Qed.
beta:radix

forall (m e : Z) (l : SpecFloatCopy.location), exists x : R, inbetween_float m e x l
beta:radix

forall (m e : Z) (l : SpecFloatCopy.location), exists x : R, inbetween_float m e x l
beta:radix
m, e:Z
l:SpecFloatCopy.location

exists x : R, inbetween_float m e x l
beta:radix
m, e:Z
l:SpecFloatCopy.location

(F2R {| Fnum := m; Fexp := e |} < F2R {| Fnum := m + 1; Fexp := e |})%R
beta:radix
m, e:Z
l:SpecFloatCopy.location

(m < m + 1)%Z
apply Zlt_succ. Qed.
beta:radix

forall (x : R) (e m : Z) (l : SpecFloatCopy.location) (m' : Z) (l' : SpecFloatCopy.location), inbetween_float m e x l -> inbetween_float m' e x l' -> m = m' /\ l = l'
beta:radix

forall (x : R) (e m : Z) (l : SpecFloatCopy.location) (m' : Z) (l' : SpecFloatCopy.location), inbetween_float m e x l -> inbetween_float m' e x l' -> m = m' /\ l = l'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'

m = m' /\ l = l'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
Hm:m = m'

l = l'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
m = m'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m e x l'
Hm:m = m'

l = l'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
m = m'
beta:radix
x:R
e, m:Z
l, l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m e x l'

l = l'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
m = m'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'

m = m'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
H1:(F2R {| Fnum := m; Fexp := e |} <= x)%R
H2:(x < F2R {| Fnum := m + 1; Fexp := e |})%R

m = m'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
H1:(F2R {| Fnum := m; Fexp := e |} <= x)%R
H2:(x < F2R {| Fnum := m + 1; Fexp := e |})%R
H3:(F2R {| Fnum := m'; Fexp := e |} <= x)%R
H4:(x < F2R {| Fnum := m' + 1; Fexp := e |})%R

m = m'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
H1:(F2R {| Fnum := m; Fexp := e |} <= x)%R
H2:(x < F2R {| Fnum := m + 1; Fexp := e |})%R
H3:(F2R {| Fnum := m'; Fexp := e |} <= x)%R
H4:(x < F2R {| Fnum := m' + 1; Fexp := e |})%R

(m < m' + 1)%Z /\ (m' < m + 1)%Z -> m = m'
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
H1:(F2R {| Fnum := m; Fexp := e |} <= x)%R
H2:(x < F2R {| Fnum := m + 1; Fexp := e |})%R
H3:(F2R {| Fnum := m'; Fexp := e |} <= x)%R
H4:(x < F2R {| Fnum := m' + 1; Fexp := e |})%R
(m < m' + 1)%Z /\ (m' < m + 1)%Z
beta:radix
x:R
e, m:Z
l:SpecFloatCopy.location
m':Z
l':SpecFloatCopy.location
H:inbetween_float m e x l
H':inbetween_float m' e x l'
H1:(F2R {| Fnum := m; Fexp := e |} <= x)%R
H2:(x < F2R {| Fnum := m + 1; Fexp := e |})%R
H3:(F2R {| Fnum := m'; Fexp := e |} <= x)%R
H4:(x < F2R {| Fnum := m' + 1; Fexp := e |})%R

(m < m' + 1)%Z /\ (m' < m + 1)%Z
now split ; apply lt_F2R with beta e ; apply Rle_lt_trans with x. Qed. End Fcalc_bracket_generic.