@[instance_reducible]
instance
Float.Model.UnpackedFloat.Sign.instDecidableForall_batteries
{p : Sign → Prop}
[(s : Sign) → Decidable (p s)]
:
@[simp]
theorem
Float.Model.UnpackedFloat.unpackSign_packComponents
{spec : Format}
(s : Sign)
(e : BitVec spec.exponentBits)
(m : BitVec spec.mantissaBitsWithoutImplicit)
:
theorem
Float.Model.UnpackedFloat.packComponents_unpackSign_unpackExponent_unpackMantissa
{spec : Format}
(b : BitVec spec.numBits)
:
@[simp]
@[simp]
@[simp]
theorem
Float.Model.UnpackedFloat.unpack_eq_notANumber_iff_of_valid
{spec : Format}
{b : BitVec spec.numBits}
(hvalid : spec.Valid b)
(hspec : 2 ≤ spec.exponentBits := by decide)
:
theorem
Float.Model.UnpackedFloat.unpack_eq_zero_iff_of_valid
{spec : Format}
{sign : Sign}
{b : BitVec spec.numBits}
(hvalid : spec.Valid b)
(hspec : 2 ≤ spec.exponentBits := by decide)
:
theorem
Float.Model.UnpackedFloat.beq_iff_ne_notANumber_and_eq
(a b : UnpackedFloat)
:
a.beq b = true ↔ a ≠ notANumber ∧ b ≠ notANumber ∧ (a = b ∨ a = zero Sign.positive ∧ b = zero Sign.negative ∨ a = zero Sign.negative ∧ b = zero Sign.positive)
theorem
Float.Model.UnpackedFloat.unpack_beq_unpack_iff
{spec : Format}
{b b' : BitVec spec.numBits}
(hb : spec.Valid b)
(hb' : spec.Valid b')
(hspec : 2 ≤ spec.exponentBits := by decide)
:
(unpack spec b).beq (unpack spec b') = true ↔ b ≠ packedNaN spec ∧ b' ≠ packedNaN spec ∧ (b = b' ∨ b = packedZero spec Sign.positive ∧ b' = packedZero spec Sign.negative ∨ b = packedZero spec Sign.negative ∧ b' = packedZero spec Sign.positive)
@[simp]
This theorem is true for all types but most other types have LawfulBEq where
bne_self_eq_false or bne_iff_ne apply.
@[simp]
This theorem is true for all types but most other types have LawfulBEq where
bne_self_eq_false or bne_iff_ne apply.
Boolean equality on Floats is symmetric and transitive, but not reflexive, as demonstrated
by nan != nan.
Boolean equality on Float32s is symmetric and transitive, but not reflexive, as demonstrated
by nan != nan.