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.
Copyright (C) 2010-2018 Guillaume Melquiond
Require Import Raux Defs Generic_fmt Operations. Section Fprop_Sterbenz. Variable beta : radix. Notation bpow e := (bpow beta e). Variable fexp : Z -> Z. Context { valid_exp : Valid_exp fexp }. Context { monotone_exp : Monotone_exp fexp }. Notation format := (generic_format beta fexp).beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%Rformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R = 0%Rformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%Rformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R = 0%Rformat 0beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%Rformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%Rformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%RZx:x = R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%RZx:x <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%RZx:x <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y = R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) < bpow (Z.min (mag beta x) (mag beta y)))%RZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0(Rabs (x + y) < bpow (Z.min (mag beta x) (mag beta y)))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:x <> 0%R -> (bpow (ex - 1) <= Rabs x < bpow ex)%R(Rabs (x + y) < bpow (Z.min (Build_mag_prop beta x ex Ex) (mag beta y)))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:x <> 0%R -> (bpow (ex - 1) <= Rabs x < bpow ex)%R(Rabs (x + y) < bpow (Z.min ex (mag beta y)))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%R(Rabs (x + y) < bpow (Z.min ex (mag beta y)))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:y <> 0%R -> (bpow (ey - 1) <= Rabs y < bpow ey)%R(Rabs (x + y) < bpow (Z.min ex (Build_mag_prop beta y ey Ey)))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:y <> 0%R -> (bpow (ey - 1) <= Rabs y < bpow ey)%R(Rabs (x + y) < bpow (Z.min ex ey))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%R(Rabs (x + y) < bpow (Z.min ex ey))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betax = F2R fxbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaF2R {| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := cexp beta fexp x |} = F2R fxbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaF2R {| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp (mag beta x) |} = F2R fxbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betay = F2R fybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fyformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaF2R {| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := cexp beta fexp y |} = F2R fybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fyformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaF2R {| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp (mag beta y) |} = F2R fybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fyformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fyformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fyformat (F2R fx + F2R fy)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fyformat (F2R (Fplus fx fy))beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fy(let (Fnum, _) := Fplus fx fy in Fnum) <> 0%Z -> (cexp beta fexp (F2R {| Fnum := let (Fnum, _) := Fplus fx fy in Fnum; Fexp := let (_, Fexp) := Fplus fx fy in Fexp |}) <= (let (_, Fexp) := Fplus fx fy in Fexp))%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fy(cexp beta fexp (F2R {| Fnum := let (Fnum, _) := Fplus fx fy in Fnum; Fexp := let (_, Fexp) := Fplus fx fy in Fexp |}) <= (let (_, Fexp) := Fplus fx fy in Fexp))%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fyforall Fnum Fexp : Z, Fplus fx fy = {| Fnum := Fnum; Fexp := Fexp |} -> (cexp beta fexp (F2R {| Fnum := Fnum; Fexp := Fexp |}) <= Fexp)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}(cexp beta fexp (F2R {| Fnum := mxy; Fexp := exy |}) <= exy)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}(cexp beta fexp (x + y) <= exy)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}(fexp (mag beta (x + y)) <= exy)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}(fexp (mag beta (x + y)) <= fexp (Z.min ex ey))%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}fexp (Z.min ex ey) = exybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}(mag beta (x + y) <= Z.min ex ey)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}fexp (Z.min ex ey) = exybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}fexp (Z.min ex ey) = exybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}fexp (Z.min ex ey) = Fexp (Fplus fx fy)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}fexp (Z.min ex ey) = Z.min (Fexp fx) (Fexp fy)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yZxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0ex:ZEx:(bpow (ex - 1) <= Rabs x < bpow ex)%Rey:ZEy:(bpow (ey - 1) <= Rabs y < bpow ey)%RHxy:(Rabs (x + y) < bpow (Z.min ex ey))%Rfx:={| Fnum := Ztrunc (scaled_mantissa beta fexp x); Fexp := fexp ex |}:float betaHx:x = F2R fxfy:={| Fnum := Ztrunc (scaled_mantissa beta fexp y); Fexp := fexp ey |}:float betaHy:y = F2R fymxy, exy:ZPxy:Fplus fx fy = {| Fnum := mxy; Fexp := exy |}fexp (Z.min ex ey) = Z.min (fexp ex) (fexp ey)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:Zfexp (Z.min ex ey) = Z.min (fexp ex) (fexp ey)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZZ.min (fexp ex) (fexp ey) = fexp (Z.min ex ey)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex <= ey)%ZH2:Z.min ex ey = exZ.min (fexp ex) (fexp ey) = fexp exfexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex > ey)%ZH2:Z.min ex ey = eyZ.min (fexp ex) (fexp ey) = fexp eybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex <= ey)%ZH2:Z.min ex ey = ex(fexp ex <= fexp ey)%Zfexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex > ey)%ZH2:Z.min ex ey = eyZ.min (fexp ex) (fexp ey) = fexp eybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex > ey)%ZH2:Z.min ex ey = eyZ.min (fexp ex) (fexp ey) = fexp eybeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex > ey)%ZH2:Z.min ex ey = ey(fexp ey <= fexp ex)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex > ey)%ZH2:Z.min ex ey = ey(ey <= ex)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)fexp:Z -> Zmonotone_exp:Monotone_exp fexpex, ey:ZH1:(ex > ey)%ZH2:Z.min ex ey = ey(ey < ex)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (Rabs (x + y))beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0format (bpow (Z.min (mag beta x) (mag beta y)))beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0(fexp (Z.min (mag beta x) (mag beta y) + 1) <= Z.min (mag beta x) (mag beta y))%Zcase (Zmin_spec (mag beta x) (mag beta y)); intros (H1,H2); rewrite H2; now apply mag_generic_gt. Qed.beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:Rabs (x + y) = bpow (Z.min (mag beta x) (mag beta y))Zxy:(x + y)%R <> 0%RZx:x <> R0Zy:y <> R0(fexp (Z.min (mag beta x) (mag beta y)) < Z.min (mag beta x) (mag beta y))%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%R -> format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%Rformat (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x = R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y = R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0format (x + y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0(Rabs (x + y) <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0(Rmin (Rabs x) (Rabs y) <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0((if Rle_dec (Rabs x) (Rabs y) then Rabs x else Rabs y) <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':(Rabs x <= Rabs y)%R(Rabs x <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':(Rabs x <= Rabs y)%R(Rabs x <= bpow (mag beta x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':(Rabs x <= Rabs y)%R(mag beta x <= mag beta y)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':(Rabs x <= Rabs y)%Rex:ZHx:x <> 0%R -> (bpow (ex - 1) <= Rabs x < bpow ex)%R(Rabs x <= bpow (Build_mag_prop beta x ex Hx))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':(Rabs x <= Rabs y)%R(mag beta x <= mag beta y)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':(Rabs x <= Rabs y)%R(mag beta x <= mag beta y)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= bpow (Z.min (mag beta x) (mag beta y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= bpow (mag beta y))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(mag beta y <= mag beta x)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%Rex:ZHy:y <> 0%R -> (bpow (ex - 1) <= Rabs y < bpow ex)%R(Rabs y <= bpow (Build_mag_prop beta y ex Hy))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(mag beta y <= mag beta x)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(mag beta y <= mag beta x)%Zbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%Ry <> 0%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= Rabs x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y <= Rabs x)%Rnow apply Rnot_le_lt. Qed.beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RFx:format xFy:format yHxy:(Rabs (x + y) <= Rmin (Rabs x) (Rabs y))%RZx:x <> R0Zy:y <> R0Hxy':~ (Rabs x <= Rabs y)%R(Rabs y < Rabs x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (y <= x <= 2 * y)%R -> format (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (y <= x <= 2 * y)%R -> format (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%Rformat (x + - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%Rformat xbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%Rformat (- y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(Rabs (x + - y) <= Rmin (Rabs x) (Rabs (- y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%Rformat (- y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(Rabs (x + - y) <= Rmin (Rabs x) (Rabs (- y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(Rabs (x + - y) <= Rmin (Rabs x) (Rabs (- y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(x + - y <= Rmin (Rabs x) (Rabs (- y)))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(x + - y <= Rmin (Rabs x) (Rabs y))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(x + - y <= Rmin (Rabs y) (Rabs x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= Rmin (Rabs y) (Rabs x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 + y <= y + y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= Rmin (Rabs y) (Rabs x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 + y <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(x <= y + y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= Rmin (Rabs y) (Rabs x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(x <= y + y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= Rmin (Rabs y) (Rabs x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= Rmin (Rabs y) (Rabs x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= Rmin y (Rabs x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= Rmin y x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(0 <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(x + - y <= (if Rle_dec y x then y else x))%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(0 <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%RHyx:(y <= x)%R(x + - y <= y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%RHyx:~ (y <= x)%R(x + - y <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(0 <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%RHyx:(y <= x)%R(x + - y + y <= y + y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%RHyx:~ (y <= x)%R(x + - y <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(0 <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%RHyx:~ (y <= x)%R(x + - y <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(0 <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%RHy0:(0 <= y)%R(0 <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rnow apply Rle_0_minus. Qed.beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y <= x)%RHxy2:(x <= 2 * y)%R(0 <= x + - y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (y / 2 <= x <= 2 * y)%R -> format (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpforall x y : R, format x -> format y -> (y / 2 <= x <= 2 * y)%R -> format (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%Rformat (- (y - x))beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%Rformat (y - x)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%R(x <= y <= 2 * x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%R(x <= y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%R(y <= 2 * x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%R(y <= 2 * x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%RRcompare (2 * x) y <> Ltbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(x <= y)%RRcompare x (y / 2) <> Ltbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%Rformat (x - y)beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%R(y <= x <= 2 * y)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%R(y <= x)%Rbeta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%R(x <= 2 * y)%Rexact Hxy2. Qed. End Fprop_Sterbenz.beta:radixfexp:Z -> Zvalid_exp:Valid_exp fexpmonotone_exp:Monotone_exp fexpx, y:RHx:format xHy:format yHxy1:(y / 2 <= x)%RHxy2:(x <= 2 * y)%RHxy:(y < x)%R(x <= 2 * y)%R