TorchLean API

NN.Proofs.RuntimeApprox.IEEE32.Contracts

Binary32 observation and error contracts #

These interfaces connect TorchLean's binary32 observations to FloatLib's real semantics. Optional observations distinguish finite values from infinities and NaNs. ULP queries return the exponent of the spacing at a finite value, and each arithmetic error bound follows from FloatLib's rounding theorem with the original finiteness hypotheses.

Whether adding the second word leaves the first encoded value unchanged, including its zero sign. The real-valued absorption theorem below additionally requires a finite result.

Instances For
    theorem TorchLean.Floats.IEEE754.IEEE32Exec.toReal?_fma_eq_ite (x y z : FloatLib.Floats.ExecFloat.Binary 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) :
    toReal? ((fun (left right addend : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => left.fma right addend) x y z) = if FloatLib.Floats.ExecFloat.Binary.isFinite ((fun (left right addend : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => left.fma right addend) x y z) = true then some (FloatLib.Floats.Formats.BinaryInterchange.Model.roundAt FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.binary32 (x.toModel.toReal * y.toModel.toReal + z.toModel.toReal)) else none

    Optional fused multiply-add result characterized by one real rounding.

    theorem TorchLean.Floats.IEEE754.IEEE32Exec.toReal?_sqrt_eq_ite (x : FloatLib.Floats.ExecFloat.Binary 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) :
    toReal? ((fun (value : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => value.sqrt) x) = if FloatLib.Floats.ExecFloat.Binary.isFinite ((fun (value : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => value.sqrt) x) = true then some (FloatLib.Floats.Formats.BinaryInterchange.Model.roundAt FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.binary32 √x.toModel.toReal) else none

    Optional square-root result characterized by one real rounding.

    theorem TorchLean.Floats.IEEE754.IEEE32Exec.toReal_fma_abs_error_of_isFinite (x y z : FloatLib.Floats.ExecFloat.Binary 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (hfin : FloatLib.Floats.ExecFloat.Binary.isFinite ((fun (left right addend : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => left.fma right addend) x y z) = true) :
    |(FloatLib.Floats.ExecFloat.Binary.toModel ((fun (left right addend : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => left.fma right addend) x y z)).toReal - (x.toModel.toReal * y.toModel.toReal + z.toModel.toReal)| ≤ FloatLib.Floats.Formats.BinaryInterchange.Model.epsilonAt FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.binary32 (x.toModel.toReal * y.toModel.toReal + z.toModel.toReal)

    Half-ULP absolute error for a finite single-rounding fused multiply-add result.

    theorem TorchLean.Floats.IEEE754.IEEE32Exec.toReal_sqrt_abs_error_of_isFinite (x : FloatLib.Floats.ExecFloat.Binary 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (hfin : FloatLib.Floats.ExecFloat.Binary.isFinite ((fun (value : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => value.sqrt) x) = true) :
    |(FloatLib.Floats.ExecFloat.Binary.toModel ((fun (value : FloatLib.Floats.ExecFloat.Binary { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.expWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.fracWidth { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.encoding { expWidth := 8, expWidth_ge_two := toReal?._proof_1, fracWidth := 23, fracWidth_pos := toReal?._proof_2, exponentBias := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8, encoding := FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee, exponentBias_pos := toReal?._proof_3, exponentBias_le_maxFinite := toReal?._proof_4 }.exponentBias ⋯ ⋯ ⋯ ⋯ (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯) (FloatLib.Floats.Formats.BinaryInterchange.Configured.Code (FloatLib.Floats.Formats.BinaryInterchange.Configured.StoragePlan.forKnownWidth (FloatLib.Floats.ExecFloat.Binary.descriptor 8 23 FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee (FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.Encoding.ieee.defaultBias 8) toReal?._proof_1 toReal?._proof_2 toReal?._proof_3 toReal?._proof_4) (1 + 8 + 23) ⋯))) => value.sqrt) x)).toReal - √x.toModel.toReal| ≤ FloatLib.Floats.Formats.BinaryInterchange.Model.epsilonAt FloatLib.Floats.Formats.BinaryInterchange.FloatFormat.binary32 √x.toModel.toReal

    Half-ULP absolute error for a finite square-root result.