Documentation

Mathlib.Algebra.Order.GroupWithZero.Unbundled.Defs

(Strict) monotonicity of multiplication by nonnegative (positive) elements #

This file defines eight typeclasses expressing monotonicity (strict monotonicity) of multiplication on the left or right by nonnegative (positive) elements in a preorder.

For left multiplication (a ↦ b * a) we define the following typeclasses:

For right multiplication (a ↦ a * b) we define the following typeclasses:

We then provide statements and instances about these typeclasses not requiring MulZeroClass or higher on the underlying type – those that do can be found in Mathlib.Algebra.Order.GroupWithZero.Unbundled.Basic.

Less granular typeclasses like OrderedAddCommMonoid and LinearOrderedField should be enough for most purposes, and the system is set up so that they imply the correct granular typeclasses here.

Implications #

As the underlying type α gets more structured, some of the above typeclasses become equivalent. The commonly used implications are:

Furthermore, the bundled non-granular typeclasses imply the granular ones like so:

All these are registered as instances, which means that in practice you should not worry about these implications. However, if you encounter a case where you think a statement is true but not covered by the current implications, please bring it up on Zulip!

Notation #

The following is local notation in this file:

See https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/notation.20for.20positive.20elements for a discussion about this notation, and whether to enable it globally (note that the notation is currently global but broken, hence actually only works locally).

class PosMulMono (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends CovariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => x * y) fun (x1 x2 : α) => x1 x2 :

Typeclass for monotonicity of multiplication by nonnegative elements on the left, namely a₁ ≤ a₂ → b * a₁ ≤ b * a₂ if 0 ≤ b.

You should usually not use this very granular typeclass directly, but rather a typeclass like OrderedSemiring.

Instances
    theorem posMulMono_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
    PosMulMono α CovariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => x * y) fun (x1 x2 : α) => x1 x2
    class PosMulStrictMono (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends CovariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => x * y) fun (x1 x2 : α) => x1 < x2 :

    Typeclass for strict monotonicity of multiplication by positive elements on the left, namely a₁ < a₂ → b * a₁ < b * a₂ if 0 < b.

    You should usually not use this very granular typeclass directly, but rather a typeclass like StrictOrderedSemiring.

    Instances
      theorem posMulStrictMono_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
      PosMulStrictMono α CovariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => x * y) fun (x1 x2 : α) => x1 < x2
      class PosMulReflectLT (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends ContravariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => x * y) fun (x1 x2 : α) => x1 < x2 :

      Typeclass for strict reverse monotonicity of multiplication by nonnegative elements on the left, namely b * a₁ < b * a₂ → a₁ < a₂ if 0 ≤ b.

      You should usually not use this very granular typeclass directly, but rather a typeclass like LinearOrderedSemiring.

      Instances
        theorem posMulReflectLT_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
        PosMulReflectLT α ContravariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => x * y) fun (x1 x2 : α) => x1 < x2
        class PosMulReflectLE (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends ContravariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => x * y) fun (x1 x2 : α) => x1 x2 :

        Typeclass for reverse monotonicity of multiplication by positive elements on the left, namely b * a₁ ≤ b * a₂ → a₁ ≤ a₂ if 0 < b.

        You should usually not use this very granular typeclass directly, but rather a typeclass like LinearOrderedSemiring.

        Instances
          theorem posMulReflectLE_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
          PosMulReflectLE α ContravariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => x * y) fun (x1 x2 : α) => x1 x2
          class MulPosMono (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends CovariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => y * x) fun (x1 x2 : α) => x1 x2 :

          Typeclass for monotonicity of multiplication by nonnegative elements on the right, namely a₁ ≤ a₂ → a₁ * b ≤ a₂ * b if 0 ≤ b.

          You should usually not use this very granular typeclass directly, but rather a typeclass like OrderedSemiring.

          Instances
            theorem mulPosMono_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
            MulPosMono α CovariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => y * x) fun (x1 x2 : α) => x1 x2
            class MulPosStrictMono (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends CovariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => y * x) fun (x1 x2 : α) => x1 < x2 :

            Typeclass for strict monotonicity of multiplication by positive elements on the right, namely a₁ < a₂ → a₁ * b < a₂ * b if 0 < b.

            You should usually not use this very granular typeclass directly, but rather a typeclass like StrictOrderedSemiring.

            Instances
              theorem mulPosStrictMono_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
              MulPosStrictMono α CovariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => y * x) fun (x1 x2 : α) => x1 < x2
              class MulPosReflectLT (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends ContravariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => y * x) fun (x1 x2 : α) => x1 < x2 :

              Typeclass for strict reverse monotonicity of multiplication by nonnegative elements on the right, namely a₁ * b < a₂ * b → a₁ < a₂ if 0 ≤ b.

              You should usually not use this very granular typeclass directly, but rather a typeclass like LinearOrderedSemiring.

              Instances
                theorem mulPosReflectLT_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
                MulPosReflectLT α ContravariantClass { x : α // 0 x } α (fun (x : { x : α // 0 x }) (y : α) => y * x) fun (x1 x2 : α) => x1 < x2
                class MulPosReflectLE (α : Type u_1) [Mul α] [Zero α] [Preorder α] extends ContravariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => y * x) fun (x1 x2 : α) => x1 x2 :

                Typeclass for reverse monotonicity of multiplication by positive elements on the right, namely a₁ * b ≤ a₂ * b → a₁ ≤ a₂ if 0 < b.

                You should usually not use this very granular typeclass directly, but rather a typeclass like LinearOrderedSemiring.

                Instances
                  theorem mulPosReflectLE_iff (α : Type u_1) [Mul α] [Zero α] [Preorder α] :
                  MulPosReflectLE α ContravariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => y * x) fun (x1 x2 : α) => x1 x2
                  instance PosMulMono.to_covariantClass_pos_mul_le {α : Type u_1} [Mul α] [Zero α] [Preorder α] [PosMulMono α] :
                  CovariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => x * y) fun (x1 x2 : α) => x1 x2
                  instance MulPosMono.to_covariantClass_pos_mul_le {α : Type u_1} [Mul α] [Zero α] [Preorder α] [MulPosMono α] :
                  CovariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => y * x) fun (x1 x2 : α) => x1 x2
                  instance PosMulReflectLT.to_contravariantClass_pos_mul_lt {α : Type u_1} [Mul α] [Zero α] [Preorder α] [PosMulReflectLT α] :
                  ContravariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => x * y) fun (x1 x2 : α) => x1 < x2
                  instance MulPosReflectLT.to_contravariantClass_pos_mul_lt {α : Type u_1} [Mul α] [Zero α] [Preorder α] [MulPosReflectLT α] :
                  ContravariantClass { x : α // 0 < x } α (fun (x : { x : α // 0 < x }) (y : α) => y * x) fun (x1 x2 : α) => x1 < x2
                  @[instance 100]
                  instance MulLeftMono.toPosMulMono {α : Type u_1} [Mul α] [Zero α] [Preorder α] [MulLeftMono α] :
                  @[instance 100]
                  instance MulRightMono.toMulPosMono {α : Type u_1} [Mul α] [Zero α] [Preorder α] [MulRightMono α] :
                  @[instance 100]
                  @[instance 100]
                  @[instance 100]
                  @[instance 100]
                  @[instance 100]
                  @[instance 100]
                  theorem mul_le_mul_of_nonneg_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulMono α] (h : b c) (a0 : 0 a) :
                  a * b a * c
                  theorem mul_le_mul_of_nonneg_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosMono α] (h : b c) (a0 : 0 a) :
                  b * a c * a
                  theorem mul_lt_mul_of_pos_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulStrictMono α] (bc : b < c) (a0 : 0 < a) :
                  a * b < a * c
                  theorem mul_lt_mul_of_pos_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosStrictMono α] (bc : b < c) (a0 : 0 < a) :
                  b * a < c * a
                  theorem lt_of_mul_lt_mul_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulReflectLT α] (h : a * b < a * c) (a0 : 0 a) :
                  b < c
                  theorem lt_of_mul_lt_mul_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosReflectLT α] (h : b * a < c * a) (a0 : 0 a) :
                  b < c
                  theorem le_of_mul_le_mul_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulReflectLE α] (bc : a * b a * c) (a0 : 0 < a) :
                  b c
                  theorem le_of_mul_le_mul_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosReflectLE α] (bc : b * a c * a) (a0 : 0 < a) :
                  b c
                  theorem lt_of_mul_lt_mul_of_nonneg_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulReflectLT α] (h : a * b < a * c) (a0 : 0 a) :
                  b < c

                  Alias of lt_of_mul_lt_mul_left.

                  theorem lt_of_mul_lt_mul_of_nonneg_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosReflectLT α] (h : b * a < c * a) (a0 : 0 a) :
                  b < c

                  Alias of lt_of_mul_lt_mul_right.

                  theorem le_of_mul_le_mul_of_pos_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulReflectLE α] (bc : a * b a * c) (a0 : 0 < a) :
                  b c

                  Alias of le_of_mul_le_mul_left.

                  theorem le_of_mul_le_mul_of_pos_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosReflectLE α] (bc : b * a c * a) (a0 : 0 < a) :
                  b c

                  Alias of le_of_mul_le_mul_right.

                  @[simp]
                  theorem mul_lt_mul_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulStrictMono α] [PosMulReflectLT α] (a0 : 0 < a) :
                  a * b < a * c b < c
                  @[simp]
                  theorem mul_lt_mul_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosStrictMono α] [MulPosReflectLT α] (a0 : 0 < a) :
                  b * a < c * a b < c
                  @[simp]
                  theorem mul_le_mul_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulMono α] [PosMulReflectLE α] (a0 : 0 < a) :
                  a * b a * c b c
                  @[simp]
                  theorem mul_le_mul_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosMono α] [MulPosReflectLE α] (a0 : 0 < a) :
                  b * a c * a b c
                  theorem mul_le_mul_iff_of_pos_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulMono α] [PosMulReflectLE α] (a0 : 0 < a) :
                  a * b a * c b c

                  Alias of mul_le_mul_left.

                  theorem mul_le_mul_iff_of_pos_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosMono α] [MulPosReflectLE α] (a0 : 0 < a) :
                  b * a c * a b c

                  Alias of mul_le_mul_right.

                  theorem mul_lt_mul_iff_of_pos_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [PosMulStrictMono α] [PosMulReflectLT α] (a0 : 0 < a) :
                  a * b < a * c b < c

                  Alias of mul_lt_mul_left.

                  theorem mul_lt_mul_iff_of_pos_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c : α} [MulPosStrictMono α] [MulPosReflectLT α] (a0 : 0 < a) :
                  b * a < c * a b < c

                  Alias of mul_lt_mul_right.

                  theorem mul_le_mul_of_nonneg {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosMono α] (h₁ : a b) (h₂ : c d) (a0 : 0 a) (d0 : 0 d) :
                  a * c b * d
                  theorem mul_le_mul_of_nonneg' {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosMono α] (h₁ : a b) (h₂ : c d) (c0 : 0 c) (b0 : 0 b) :
                  a * c b * d
                  theorem mul_lt_mul_of_le_of_lt_of_pos_of_nonneg {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulStrictMono α] [MulPosMono α] (h₁ : a b) (h₂ : c < d) (a0 : 0 < a) (d0 : 0 d) :
                  a * c < b * d
                  theorem mul_lt_mul_of_pos_of_nonneg {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulStrictMono α] [MulPosMono α] (h₁ : a b) (h₂ : c < d) (a0 : 0 < a) (d0 : 0 d) :
                  a * c < b * d

                  Alias of mul_lt_mul_of_le_of_lt_of_pos_of_nonneg.

                  theorem mul_lt_mul_of_le_of_lt_of_nonneg_of_pos {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulStrictMono α] [MulPosMono α] (h₁ : a b) (h₂ : c < d) (c0 : 0 c) (b0 : 0 < b) :
                  a * c < b * d
                  theorem mul_lt_mul_of_nonneg_of_pos' {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulStrictMono α] [MulPosMono α] (h₁ : a b) (h₂ : c < d) (c0 : 0 c) (b0 : 0 < b) :
                  a * c < b * d

                  Alias of mul_lt_mul_of_le_of_lt_of_nonneg_of_pos.

                  theorem mul_lt_mul_of_lt_of_le_of_nonneg_of_pos {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosStrictMono α] (h₁ : a < b) (h₂ : c d) (a0 : 0 a) (d0 : 0 < d) :
                  a * c < b * d
                  theorem mul_lt_mul_of_nonneg_of_pos {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosStrictMono α] (h₁ : a < b) (h₂ : c d) (a0 : 0 a) (d0 : 0 < d) :
                  a * c < b * d

                  Alias of mul_lt_mul_of_lt_of_le_of_nonneg_of_pos.

                  theorem mul_lt_mul_of_lt_of_le_of_pos_of_nonneg {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosStrictMono α] (h₁ : a < b) (h₂ : c d) (c0 : 0 < c) (b0 : 0 b) :
                  a * c < b * d
                  theorem mul_lt_mul_of_pos_of_nonneg' {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosStrictMono α] (h₁ : a < b) (h₂ : c d) (c0 : 0 < c) (b0 : 0 b) :
                  a * c < b * d

                  Alias of mul_lt_mul_of_lt_of_le_of_pos_of_nonneg.

                  theorem mul_lt_mul_of_pos {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulStrictMono α] [MulPosStrictMono α] (h₁ : a < b) (h₂ : c < d) (a0 : 0 < a) (d0 : 0 < d) :
                  a * c < b * d
                  theorem mul_lt_mul_of_pos' {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulStrictMono α] [MulPosStrictMono α] (h₁ : a < b) (h₂ : c < d) (c0 : 0 < c) (b0 : 0 < b) :
                  a * c < b * d
                  theorem mul_le_mul {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosMono α] (h₁ : a b) (h₂ : c d) (c0 : 0 c) (b0 : 0 b) :
                  a * c b * d

                  Alias of mul_le_mul_of_nonneg'.

                  theorem mul_lt_mul {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] [MulPosStrictMono α] (h₁ : a < b) (h₂ : c d) (c0 : 0 < c) (b0 : 0 b) :
                  a * c < b * d

                  Alias of mul_lt_mul_of_lt_of_le_of_pos_of_nonneg.


                  Alias of mul_lt_mul_of_lt_of_le_of_pos_of_nonneg.

                  theorem mul_lt_mul' {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulStrictMono α] [MulPosMono α] (h₁ : a b) (h₂ : c < d) (c0 : 0 c) (b0 : 0 < b) :
                  a * c < b * d

                  Alias of mul_lt_mul_of_le_of_lt_of_nonneg_of_pos.


                  Alias of mul_lt_mul_of_le_of_lt_of_nonneg_of_pos.

                  theorem mul_le_of_mul_le_of_nonneg_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] (h : a * b c) (hle : d b) (a0 : 0 a) :
                  a * d c
                  theorem mul_lt_of_mul_lt_of_nonneg_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] (h : a * b < c) (hle : d b) (a0 : 0 a) :
                  a * d < c
                  theorem le_mul_of_le_mul_of_nonneg_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] (h : a b * c) (hle : c d) (b0 : 0 b) :
                  a b * d
                  theorem lt_mul_of_lt_mul_of_nonneg_left {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [PosMulMono α] (h : a < b * c) (hle : c d) (b0 : 0 b) :
                  a < b * d
                  theorem mul_le_of_mul_le_of_nonneg_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [MulPosMono α] (h : a * b c) (hle : d a) (b0 : 0 b) :
                  d * b c
                  theorem mul_lt_of_mul_lt_of_nonneg_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [MulPosMono α] (h : a * b < c) (hle : d a) (b0 : 0 b) :
                  d * b < c
                  theorem le_mul_of_le_mul_of_nonneg_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [MulPosMono α] (h : a b * c) (hle : b d) (c0 : 0 c) :
                  a d * c
                  theorem lt_mul_of_lt_mul_of_nonneg_right {α : Type u_1} [Mul α] [Zero α] [Preorder α] {a b c d : α} [MulPosMono α] (h : a < b * c) (hle : b d) (c0 : 0 c) :
                  a < d * c
                  theorem posMulMono_iff_mulPosMono {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] :
                  theorem PosMulMono.toMulPosMono {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] [PosMulMono α] :
                  theorem posMulStrictMono_iff_mulPosStrictMono {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] :
                  theorem PosMulStrictMono.toMulPosStrictMono {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] [PosMulStrictMono α] :
                  theorem posMulReflectLE_iff_mulPosReflectLE {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] :
                  theorem PosMulReflectLE.toMulPosReflectLE {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] [PosMulReflectLE α] :
                  theorem posMulReflectLT_iff_mulPosReflectLT {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] :
                  theorem PosMulReflectLT.toMulPosReflectLT {α : Type u_1} [Mul α] [Zero α] [Preorder α] [Std.Commutative fun (x1 x2 : α) => x1 * x2] [PosMulReflectLT α] :
                  @[instance 100]
                  @[instance 100]