TorchLean API

FloatLib.Floats.Formats.Posit.Rounding.Quotient.Direct.Semantics

Posit semantics of direct quotient prefixes #

The representation-independent quotient-prefix bracket determines Posit regime, exponent, fraction, and appended-bit rounding thresholds. Exact quotient-and-remainder bounds show that truncation brackets the rational quotient and that jamming preserves its comparison with the rounding threshold.

theorem FloatLib.Floats.Formats.Posit.Model.DirectDyadicQuotient.lowerCodeForPositive_eq_lowerCandidateFromQuotient_positive (format : Format) (regime : ) (exponentField quotient remainder denominator leading : ) (hregime : 0 regime) (hrun : regime.toNat + 1 < format.payloadBits) (hleadingWidth : format.payloadBits leading) (hexponent : exponentField < 4) (hlower : 2 ^ leading quotient) (hupper : quotient < 2 ^ (leading + 1)) (hdenominator : 0 < denominator) (hremainder : remainder < denominator) :
lowerCodeForPositive format ((quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4)) = DirectDyadicPacking.lowerCandidateFromFields format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading

An interior positive-regime quotient prefix is exactly the rational model's greatest lower code.

theorem FloatLib.Floats.Formats.Posit.Model.DirectDyadicQuotient.lowerCodeForPositive_eq_lowerCandidateFromQuotient_negative (format : Format) (regime : ) (exponentField quotient remainder denominator leading : ) (hregime : regime < 0) (hrun : (-regime).toNat < format.payloadBits) (hleadingWidth : format.payloadBits leading) (hexponent : exponentField < 4) (hlower : 2 ^ leading quotient) (hupper : quotient < 2 ^ (leading + 1)) (hdenominator : 0 < denominator) (hremainder : remainder < denominator) :
lowerCodeForPositive format ((quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4)) = DirectDyadicPacking.lowerCandidateFromFields format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading

An interior negative-regime quotient prefix is exactly the rational model's greatest lower code.

theorem FloatLib.Floats.Formats.Posit.Model.DirectDyadicQuotient.roundInteriorCode_eq_quotientMidpointDecision_positive (format : Format) (regime : ) (exponentField quotient remainder denominator leading : ) (hregime : 0 regime) (hrun : regime.toNat + 1 < format.payloadBits) (hleadingWidth : format.payloadBits leading) (hexponent : exponentField < 4) (hlower : 2 ^ leading quotient) (hupper : quotient < 2 ^ (leading + 1)) (hdenominator : 0 < denominator) (hremainder : remainder < denominator) :
GuardStickyRounding.roundInteriorCode format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading (regime.toNat + 2) = have lower := DirectDyadicPacking.lowerCandidateFromFields format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading; have threshold := roundingThreshold format lower; have target := (quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4); if target < threshold then lower else if threshold < target then lower + 1 else if lower % 2 = 0 then lower else lower + 1

Interior positive-regime guard/sticky rounding makes the exact quotient threshold decision.

theorem FloatLib.Floats.Formats.Posit.Model.DirectDyadicQuotient.roundInteriorCode_eq_quotientMidpointDecision_negative (format : Format) (regime : ) (exponentField quotient remainder denominator leading : ) (hregime : regime < 0) (hrun : (-regime).toNat < format.payloadBits) (hleadingWidth : format.payloadBits leading) (hexponent : exponentField < 4) (hlower : 2 ^ leading quotient) (hupper : quotient < 2 ^ (leading + 1)) (hdenominator : 0 < denominator) (hremainder : remainder < denominator) :
GuardStickyRounding.roundInteriorCode format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading ((-regime).toNat + 1) = have lower := DirectDyadicPacking.lowerCandidateFromFields format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading; have threshold := roundingThreshold format lower; have target := (quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4); if target < threshold then lower else if threshold < target then lower + 1 else if lower % 2 = 0 then lower else lower + 1

Interior negative-regime guard/sticky rounding makes the exact quotient threshold decision.

theorem FloatLib.Floats.Formats.Posit.Model.DirectDyadicQuotient.roundInteriorCode_eq_roundPositiveCode_positive (format : Format) (regime : ) (exponentField quotient remainder denominator leading : ) (hregime : 0 regime) (hrun : regime.toNat + 1 < format.payloadBits) (hleadingWidth : format.payloadBits leading) (hexponent : exponentField < 4) (hlower : 2 ^ leading quotient) (hupper : quotient < 2 ^ (leading + 1)) (hdenominator : 0 < denominator) (hremainder : remainder < denominator) (hnotUnderflow : ¬(quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4) < minPositiveRat format) :
GuardStickyRounding.roundInteriorCode format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading (regime.toNat + 2) = Model.roundPositiveCode format ((quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4))

Interior positive-regime field rounding is the exact rational positive quotient rounder.

theorem FloatLib.Floats.Formats.Posit.Model.DirectDyadicQuotient.roundInteriorCode_eq_roundPositiveCode_negative (format : Format) (regime : ) (exponentField quotient remainder denominator leading : ) (hregime : regime < 0) (hrun : (-regime).toNat < format.payloadBits) (hleadingWidth : format.payloadBits leading) (hexponent : exponentField < 4) (hlower : 2 ^ leading quotient) (hupper : quotient < 2 ^ (leading + 1)) (hdenominator : 0 < denominator) (hremainder : remainder < denominator) (hnotUnderflow : ¬(quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4) < minPositiveRat format) :
GuardStickyRounding.roundInteriorCode format regime exponentField (StickyPrefix.jamRemainder quotient remainder) leading ((-regime).toNat + 1) = Model.roundPositiveCode format ((quotient + remainder / denominator) / ↑(2 ^ leading) * 2 ^ Int.ofNat exponentField * 2 ^ (regime * 4))

Interior negative-regime field rounding is the exact rational positive quotient rounder.