Documentation

Mathlib.Algebra.Order.Ring.WithTop

Structures involving * and 0 on WithTop and WithBot #

The main results of this section are WithTop.canonicallyOrderedCommSemiring and WithBot.orderedCommSemiring.

Equations
@[simp]
theorem WithTop.coe_mul {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : α) (b : α) :
↑(a * b) = ↑a * ↑b
theorem WithTop.mul_top' {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : WithTop α) :
a * ⊤ = if a = 0 then 0 else ⊤
@[simp]
theorem WithTop.mul_top {α : Type u_1} [DecidableEq α] [MulZeroClass α] {a : WithTop α} (h : a ≠ 0) :
theorem WithTop.top_mul' {α : Type u_1} [DecidableEq α] [MulZeroClass α] (b : WithTop α) :
⊤ * b = if b = 0 then 0 else ⊤
@[simp]
theorem WithTop.top_mul {α : Type u_1} [DecidableEq α] [MulZeroClass α] {b : WithTop α} (hb : b ≠ 0) :
@[simp]
theorem WithTop.top_mul_top {α : Type u_1} [DecidableEq α] [MulZeroClass α] :
theorem WithTop.mul_def {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : WithTop α) (b : WithTop α) :
a * b = if a = 0 ∨ b = 0 then 0 else WithTop.map₂ (fun (x x_1 : α) => x * x_1) a b
theorem WithTop.mul_eq_top_iff {α : Type u_1} [DecidableEq α] [MulZeroClass α] {a : WithTop α} {b : WithTop α} :
a * b = ⊤ ↔ a ≠ 0 ∧ b = ⊤ ∨ a = ⊤ ∧ b ≠ 0
theorem WithTop.mul_coe_eq_bind {α : Type u_1} [DecidableEq α] [MulZeroClass α] {b : α} (hb : b ≠ 0) (a : WithTop α) :
a * ↑b = Option.bind a fun (a : α) => some (a * b)
theorem WithTop.coe_mul_eq_bind {α : Type u_1} [DecidableEq α] [MulZeroClass α] {a : α} (ha : a ≠ 0) (b : WithTop α) :
↑a * b = Option.bind b fun (b : α) => some (a * b)
@[simp]
theorem WithTop.untop'_zero_mul {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : WithTop α) (b : WithTop α) :
theorem WithTop.mul_lt_top' {α : Type u_1} [DecidableEq α] [MulZeroClass α] [LT α] {a : WithTop α} {b : WithTop α} (ha : a < ⊤) (hb : b < ⊤) :
a * b < ⊤
theorem WithTop.mul_lt_top {α : Type u_1} [DecidableEq α] [MulZeroClass α] [LT α] {a : WithTop α} {b : WithTop α} (ha : a ≠ ⊤) (hb : b ≠ ⊤) :
a * b < ⊤
Equations
  • ⋯ = ⋯

Nontrivial α is needed here as otherwise we have 1 * ⊤ = ⊤ but also 0 * ⊤ = 0.

Equations
  • WithTop.instMulZeroOneClass = let __spread.0 := WithTop.instMulZeroClass; MulZeroOneClass.mk ⋯ ⋯

A version of WithTop.map for MonoidWithZeroHoms.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    Equations
    Equations
    • WithTop.instMonoidWithZero = let __spread.0 := WithTop.instMulZeroOneClass; let __spread.1 := WithTop.instSemigroupWithZero; MonoidWithZero.mk ⋯ ⋯
    @[simp]
    theorem WithTop.coe_pow {α : Type u_1} [DecidableEq α] [MonoidWithZero α] [NoZeroDivisors α] [Nontrivial α] (a : α) (n : ℕ) :
    ↑(a ^ n) = ↑a ^ n
    Equations

    This instance requires CanonicallyOrderedCommSemiring as it is the smallest class that derives from both NonAssocNonUnitalSemiring and CanonicallyOrderedAddCommMonoid, both of which are required for distributivity.

    Equations
    • WithTop.commSemiring = let __src := WithTop.addCommMonoidWithOne; let __src_1 := WithTop.instCommMonoidWithZero; CommSemiring.mk ⋯
    Equations
    • One or more equations did not get rendered due to their size.

    A version of WithTop.map for RingHoms.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      Equations
      • WithBot.instMulZeroClassWithBot = WithTop.instMulZeroClass
      @[simp]
      theorem WithBot.coe_mul {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : α) (b : α) :
      ↑(a * b) = ↑a * ↑b
      theorem WithBot.mul_bot' {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : WithBot α) :
      a * ⊥ = if a = 0 then 0 else ⊥
      @[simp]
      theorem WithBot.mul_bot {α : Type u_1} [DecidableEq α] [MulZeroClass α] {a : WithBot α} (h : a ≠ 0) :
      theorem WithBot.bot_mul' {α : Type u_1} [DecidableEq α] [MulZeroClass α] (b : WithBot α) :
      ⊥ * b = if b = 0 then 0 else ⊥
      @[simp]
      theorem WithBot.bot_mul {α : Type u_1} [DecidableEq α] [MulZeroClass α] {b : WithBot α} (hb : b ≠ 0) :
      @[simp]
      theorem WithBot.bot_mul_bot {α : Type u_1} [DecidableEq α] [MulZeroClass α] :
      theorem WithBot.mul_def {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : WithBot α) (b : WithBot α) :
      a * b = if a = 0 ∨ b = 0 then 0 else WithBot.map₂ (fun (x x_1 : α) => x * x_1) a b
      theorem WithBot.mul_eq_bot_iff {α : Type u_1} [DecidableEq α] [MulZeroClass α] {a : WithBot α} {b : WithBot α} :
      a * b = ⊥ ↔ a ≠ 0 ∧ b = ⊥ ∨ a = ⊥ ∧ b ≠ 0
      theorem WithBot.mul_coe_eq_bind {α : Type u_1} [DecidableEq α] [MulZeroClass α] {b : α} (hb : b ≠ 0) (a : WithBot α) :
      a * ↑b = Option.bind a fun (a : α) => some (a * b)
      theorem WithBot.coe_mul_eq_bind {α : Type u_1} [DecidableEq α] [MulZeroClass α] {a : α} (ha : a ≠ 0) (b : WithBot α) :
      ↑a * b = Option.bind b fun (b : α) => some (a * b)
      @[simp]
      theorem WithBot.unbot'_zero_mul {α : Type u_1} [DecidableEq α] [MulZeroClass α] (a : WithBot α) (b : WithBot α) :
      theorem WithBot.bot_lt_mul' {α : Type u_1} [DecidableEq α] [MulZeroClass α] [LT α] {a : WithBot α} {b : WithBot α} (ha : ⊥ < a) (hb : ⊥ < b) :
      ⊥ < a * b
      theorem WithBot.bot_lt_mul {α : Type u_1} [DecidableEq α] [MulZeroClass α] [LT α] {a : WithBot α} {b : WithBot α} (ha : a ≠ ⊥) (hb : b ≠ ⊥) :
      ⊥ < a * b
      Equations
      • ⋯ = ⋯

      Nontrivial α is needed here as otherwise we have 1 * ⊥ = ⊥ but also = 0 * ⊥ = 0.

      Equations
      • WithBot.instMulZeroOneClass = WithTop.instMulZeroOneClass
      Equations
      • WithBot.instSemigroupWithZero = WithTop.instSemigroupWithZero
      Equations
      • WithBot.instMonoidWithZero = WithTop.instMonoidWithZero
      @[simp]
      theorem WithBot.coe_pow {α : Type u_1} [DecidableEq α] [MonoidWithZero α] [NoZeroDivisors α] [Nontrivial α] (a : α) (n : ℕ) :
      ↑(a ^ n) = ↑a ^ n
      Equations
      • WithBot.commMonoidWithZero = WithTop.instCommMonoidWithZero
      Equations
      • WithBot.commSemiring = WithTop.commSemiring
      Equations
      • WithBot.orderedCommSemiring = let __src := ⋯; let __src := WithBot.orderedAddCommMonoid; let __src_1 := WithBot.commSemiring; OrderedCommSemiring.mk ⋯