File: Mathlib/Algebra/Order/GroupWithZero/Unbundled.lean

full_name: «_aux_Mathlib_Algebra_Order_GroupWithZero_Unbundled___macroRules_termα≥0_1»
code: /-- Local notation for the nonnegative elements of a type `α`. TODO: actually make local. -/
notation "α≥0" => { x : α // 0 ≤ x }
goal: Lean.Macro

full_name: «_aux_Mathlib_Algebra_Order_GroupWithZero_Unbundled___macroRules_termα>0_1»
code: /-- Local notation for the positive elements of a type `α`. TODO: actually make local. -/
notation "α>0" => { x : α // 0 < x }
goal: Lean.Macro

full_name: PosMulMono
code: /-- Typeclass for monotonicity of multiplication by nonnegative elements on the left,
namely `b₁ ≤ b₂ → a * b₁ ≤ a * b₂` if `0 ≤ a`.

You should usually not use this very granular typeclass directly, but rather a typeclass like
`OrderedSemiring`. -/
abbrev PosMulMono : Prop 
goal: Prop

full_name: MulPosMono
code: /-- 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`. -/
abbrev MulPosMono : Prop 
goal: Prop

full_name: PosMulStrictMono
code: /-- Typeclass for strict monotonicity of multiplication by positive elements on the left,
namely `b₁ < b₂ → a * b₁ < a * b₂` if `0 < a`.

You should usually not use this very granular typeclass directly, but rather a typeclass like
`StrictOrderedSemiring`. -/
abbrev PosMulStrictMono : Prop 
goal: Prop

full_name: MulPosStrictMono
code: /-- 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`. -/
abbrev MulPosStrictMono : Prop 
goal: Prop

full_name: PosMulReflectLT
code: /-- Typeclass for strict reverse monotonicity of multiplication by nonnegative elements on
the left, namely `a * b₁ < a * b₂ → b₁ < b₂` if `0 ≤ a`.

You should usually not use this very granular typeclass directly, but rather a typeclass like
`LinearOrderedSemiring`. -/
abbrev PosMulReflectLT : Prop 
goal: Prop

full_name: MulPosReflectLT
code: /-- 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`. -/
abbrev MulPosReflectLT : Prop 
goal: Prop

full_name: PosMulReflectLE
code: /-- Typeclass for reverse monotonicity of multiplication by positive elements on the left,
namely `a * b₁ ≤ a * b₂ → b₁ ≤ b₂` if `0 < a`.

You should usually not use this very granular typeclass directly, but rather a typeclass like
`LinearOrderedSemiring`. -/
abbrev PosMulReflectLE : Prop 
goal: Prop

full_name: MulPosReflectLE
code: /-- 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`. -/
abbrev MulPosReflectLE : Prop 
goal: Prop

full_name: PosMulMono.to_covariantClass_pos_mul_le
code: instance PosMulMono.to_covariantClass_pos_mul_le [PosMulMono α] :
    CovariantClass α>0 α (fun x y => x * y) (· ≤ ·) 
goal: CovariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x ≤ x_1

full_name: MulPosMono.to_covariantClass_pos_mul_le
code: instance MulPosMono.to_covariantClass_pos_mul_le [MulPosMono α] :
    CovariantClass α>0 α (fun x y => y * x) (· ≤ ·) 
goal: CovariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x ≤ x_1

full_name: PosMulReflectLT.to_contravariantClass_pos_mul_lt
code: instance PosMulReflectLT.to_contravariantClass_pos_mul_lt [PosMulReflectLT α] :
    ContravariantClass α>0 α (fun x y => x * y) (· < ·) 
goal: ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1

full_name: MulPosReflectLT.to_contravariantClass_pos_mul_lt
code: instance MulPosReflectLT.to_contravariantClass_pos_mul_lt [MulPosReflectLT α] :
    ContravariantClass α>0 α (fun x y => y * x) (· < ·) 
goal: ContravariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x < x_1

full_name: mul_le_mul_of_nonneg_left
code: @[gcongr]
theorem mul_le_mul_of_nonneg_left [PosMulMono α] (h : b ≤ c) (a0 : 0 ≤ a) : a * b ≤ a * c 
goal: a * b ≤ a * c

full_name: mul_le_mul_of_nonneg_right
code: @[gcongr]
theorem mul_le_mul_of_nonneg_right [MulPosMono α] (h : b ≤ c) (a0 : 0 ≤ a) : b * a ≤ c * a 
goal: b * a ≤ c * a

full_name: mul_lt_mul_of_pos_left
code: @[gcongr]
theorem mul_lt_mul_of_pos_left [PosMulStrictMono α] (bc : b < c) (a0 : 0 < a) : a * b < a * c 
goal: a * b < a * c

full_name: mul_lt_mul_of_pos_right
code: @[gcongr]
theorem mul_lt_mul_of_pos_right [MulPosStrictMono α] (bc : b < c) (a0 : 0 < a) : b * a < c * a 
goal: b * a < c * a

full_name: lt_of_mul_lt_mul_left
code: theorem lt_of_mul_lt_mul_left [PosMulReflectLT α] (h : a * b < a * c) (a0 : 0 ≤ a) : b < c 
goal: b < c

full_name: lt_of_mul_lt_mul_right
code: theorem lt_of_mul_lt_mul_right [MulPosReflectLT α] (h : b * a < c * a) (a0 : 0 ≤ a) : b < c 
goal: b < c

full_name: le_of_mul_le_mul_left
code: theorem le_of_mul_le_mul_left [PosMulReflectLE α] (bc : a * b ≤ a * c) (a0 : 0 < a) : b ≤ c 
goal: b ≤ c

full_name: le_of_mul_le_mul_right
code: theorem le_of_mul_le_mul_right [MulPosReflectLE α] (bc : b * a ≤ c * a) (a0 : 0 < a) : b ≤ c 
goal: b ≤ c

full_name: mul_lt_mul_left
code: @[simp]
theorem mul_lt_mul_left [PosMulStrictMono α] [PosMulReflectLT α] (a0 : 0 < a) :
    a * b < a * c ↔ b < c 
goal: a * b < a * c ↔ b < c

full_name: mul_lt_mul_right
code: @[simp]
theorem mul_lt_mul_right [MulPosStrictMono α] [MulPosReflectLT α] (a0 : 0 < a) :
    b * a < c * a ↔ b < c 
goal: b * a < c * a ↔ b < c

full_name: mul_le_mul_left
code: @[simp]
theorem mul_le_mul_left [PosMulMono α] [PosMulReflectLE α] (a0 : 0 < a) : a * b ≤ a * c ↔ b ≤ c 
goal: a * b ≤ a * c ↔ b ≤ c

full_name: mul_le_mul_right
code: @[simp]
theorem mul_le_mul_right [MulPosMono α] [MulPosReflectLE α] (a0 : 0 < a) : b * a ≤ c * a ↔ b ≤ c 
goal: b * a ≤ c * a ↔ b ≤ c

full_name: mul_le_mul_of_nonneg
code: theorem mul_le_mul_of_nonneg [PosMulMono α] [MulPosMono α]
    (h₁ : a ≤ b) (h₂ : c ≤ d) (a0 : 0 ≤ a) (d0 : 0 ≤ d) : a * c ≤ b * d 
goal: a * c ≤ b * d

full_name: mul_le_mul_of_nonneg'
code: theorem mul_le_mul_of_nonneg' [PosMulMono α] [MulPosMono α]
    (h₁ : a ≤ b) (h₂ : c ≤ d) (c0 : 0 ≤ c) (b0 : 0 ≤ b) : a * c ≤ b * d 
goal: a * c ≤ b * d

full_name: mul_lt_mul_of_le_of_lt_of_pos_of_nonneg
code: theorem mul_lt_mul_of_le_of_lt_of_pos_of_nonneg [PosMulStrictMono α] [MulPosMono α]
    (h₁ : a ≤ b) (h₂ : c < d) (a0 : 0 < a) (d0 : 0 ≤ d) : a * c < b * d 
goal: a * c < b * d

full_name: mul_lt_mul_of_le_of_lt_of_nonneg_of_pos
code: theorem mul_lt_mul_of_le_of_lt_of_nonneg_of_pos [PosMulStrictMono α] [MulPosMono α]
    (h₁ : a ≤ b) (h₂ : c < d) (c0 : 0 ≤ c) (b0 : 0 < b) : a * c < b * d 
goal: a * c < b * d

full_name: mul_lt_mul_of_lt_of_le_of_nonneg_of_pos
code: theorem mul_lt_mul_of_lt_of_le_of_nonneg_of_pos [PosMulMono α] [MulPosStrictMono α]
    (h₁ : a < b) (h₂ : c ≤ d) (a0 : 0 ≤ a) (d0 : 0 < d) : a * c < b * d 
goal: a * c < b * d

full_name: mul_lt_mul_of_lt_of_le_of_pos_of_nonneg
code: theorem mul_lt_mul_of_lt_of_le_of_pos_of_nonneg [PosMulMono α] [MulPosStrictMono α]
    (h₁ : a < b) (h₂ : c ≤ d) (c0 : 0 < c) (b0 : 0 ≤ b) : a * c < b * d 
goal: a * c < b * d

full_name: mul_lt_mul_of_pos
code: theorem mul_lt_mul_of_pos [PosMulStrictMono α] [MulPosStrictMono α]
    (h₁ : a < b) (h₂ : c < d) (a0 : 0 < a) (d0 : 0 < d) : a * c < b * d 
goal: a * c < b * d

full_name: mul_lt_mul_of_pos'
code: theorem mul_lt_mul_of_pos' [PosMulStrictMono α] [MulPosStrictMono α]
    (h₁ : a < b) (h₂ : c < d) (c0 : 0 < c) (b0 : 0 < b) : a * c < b * d 
goal: a * c < b * d

full_name: mul_le_of_mul_le_of_nonneg_left
code: theorem mul_le_of_mul_le_of_nonneg_left [PosMulMono α] (h : a * b ≤ c) (hle : d ≤ b) (a0 : 0 ≤ a) :
    a * d ≤ c 
goal: a * d ≤ c

full_name: mul_lt_of_mul_lt_of_nonneg_left
code: theorem mul_lt_of_mul_lt_of_nonneg_left [PosMulMono α] (h : a * b < c) (hle : d ≤ b) (a0 : 0 ≤ a) :
    a * d < c 
goal: a * d < c

full_name: le_mul_of_le_mul_of_nonneg_left
code: theorem le_mul_of_le_mul_of_nonneg_left [PosMulMono α] (h : a ≤ b * c) (hle : c ≤ d) (b0 : 0 ≤ b) :
    a ≤ b * d 
goal: a ≤ b * d

full_name: lt_mul_of_lt_mul_of_nonneg_left
code: theorem lt_mul_of_lt_mul_of_nonneg_left [PosMulMono α] (h : a < b * c) (hle : c ≤ d) (b0 : 0 ≤ b) :
    a < b * d 
goal: a < b * d

full_name: mul_le_of_mul_le_of_nonneg_right
code: theorem mul_le_of_mul_le_of_nonneg_right [MulPosMono α] (h : a * b ≤ c) (hle : d ≤ a) (b0 : 0 ≤ b) :
    d * b ≤ c 
goal: d * b ≤ c

full_name: mul_lt_of_mul_lt_of_nonneg_right
code: theorem mul_lt_of_mul_lt_of_nonneg_right [MulPosMono α] (h : a * b < c) (hle : d ≤ a) (b0 : 0 ≤ b) :
    d * b < c 
goal: d * b < c

full_name: le_mul_of_le_mul_of_nonneg_right
code: theorem le_mul_of_le_mul_of_nonneg_right [MulPosMono α] (h : a ≤ b * c) (hle : b ≤ d) (c0 : 0 ≤ c) :
    a ≤ d * c 
goal: a ≤ d * c

full_name: lt_mul_of_lt_mul_of_nonneg_right
code: theorem lt_mul_of_lt_mul_of_nonneg_right [MulPosMono α] (h : a < b * c) (hle : b ≤ d) (c0 : 0 ≤ c) :
    a < d * c 
goal: a < d * c

full_name: PosMulStrictMono.toPosMulReflectLE
code: instance (priority := 100) PosMulStrictMono.toPosMulReflectLE [PosMulStrictMono α] :
    PosMulReflectLE α 
goal: PosMulReflectLE α

full_name: MulPosStrictMono.toMulPosReflectLE
code: instance (priority := 100) MulPosStrictMono.toMulPosReflectLE [MulPosStrictMono α] :
    MulPosReflectLE α 
goal: MulPosReflectLE α

full_name: PosMulReflectLE.toPosMulStrictMono
code: theorem PosMulReflectLE.toPosMulStrictMono [PosMulReflectLE α] : PosMulStrictMono α 
goal: PosMulStrictMono α

full_name: MulPosReflectLE.toMulPosStrictMono
code: theorem MulPosReflectLE.toMulPosStrictMono [MulPosReflectLE α] : MulPosStrictMono α 
goal: MulPosStrictMono α

full_name: posMulStrictMono_iff_posMulReflectLE
code: theorem posMulStrictMono_iff_posMulReflectLE : PosMulStrictMono α ↔ PosMulReflectLE α 
goal: PosMulStrictMono α ↔ PosMulReflectLE α

full_name: mulPosStrictMono_iff_mulPosReflectLE
code: theorem mulPosStrictMono_iff_mulPosReflectLE : MulPosStrictMono α ↔ MulPosReflectLE α 
goal: MulPosStrictMono α ↔ MulPosReflectLE α

full_name: PosMulReflectLT.toPosMulMono
code: theorem PosMulReflectLT.toPosMulMono [PosMulReflectLT α] : PosMulMono α 
goal: PosMulMono α

full_name: MulPosReflectLT.toMulPosMono
code: theorem MulPosReflectLT.toMulPosMono [MulPosReflectLT α] : MulPosMono α 
goal: MulPosMono α

full_name: PosMulMono.toPosMulReflectLT
code: theorem PosMulMono.toPosMulReflectLT [PosMulMono α] : PosMulReflectLT α 
goal: PosMulReflectLT α

full_name: MulPosMono.toMulPosReflectLT
code: theorem MulPosMono.toMulPosReflectLT [MulPosMono α] : MulPosReflectLT α 
goal: MulPosReflectLT α

full_name: posMulMono_iff_posMulReflectLT
code: theorem posMulMono_iff_posMulReflectLT : PosMulMono α ↔ PosMulReflectLT α 
goal: PosMulMono α ↔ PosMulReflectLT α

full_name: mulPosMono_iff_mulPosReflectLT
code: theorem mulPosMono_iff_mulPosReflectLT : MulPosMono α ↔ MulPosReflectLT α 
goal: MulPosMono α ↔ MulPosReflectLT α

full_name: Left.mul_pos
code: /-- Assumes left covariance. -/
theorem Left.mul_pos [PosMulStrictMono α] (ha : 0 < a) (hb : 0 < b) : 0 < a * b 
goal: 0 < a * b

full_name: mul_neg_of_pos_of_neg
code: theorem mul_neg_of_pos_of_neg [PosMulStrictMono α] (ha : 0 < a) (hb : b < 0) : a * b < 0 
goal: a * b < 0

full_name: mul_pos_iff_of_pos_left
code: @[simp]
theorem mul_pos_iff_of_pos_left [PosMulStrictMono α] [PosMulReflectLT α] (h : 0 < a) :
    0 < a * b ↔ 0 < b 
goal: 0 < a * b ↔ 0 < b

full_name: Right.mul_pos
code: /-- Assumes right covariance. -/
theorem Right.mul_pos [MulPosStrictMono α] (ha : 0 < a) (hb : 0 < b) : 0 < a * b 
goal: 0 < a * b

full_name: mul_neg_of_neg_of_pos
code: theorem mul_neg_of_neg_of_pos [MulPosStrictMono α] (ha : a < 0) (hb : 0 < b) : a * b < 0 
goal: a * b < 0

full_name: mul_pos_iff_of_pos_right
code: @[simp]
theorem mul_pos_iff_of_pos_right [MulPosStrictMono α] [MulPosReflectLT α] (h : 0 < b) :
    0 < a * b ↔ 0 < a 
goal: 0 < a * b ↔ 0 < a

full_name: Left.mul_nonneg
code: /-- Assumes left covariance. -/
theorem Left.mul_nonneg [PosMulMono α] (ha : 0 ≤ a) (hb : 0 ≤ b) : 0 ≤ a * b 
goal: 0 ≤ a * b

full_name: mul_nonpos_of_nonneg_of_nonpos
code: theorem mul_nonpos_of_nonneg_of_nonpos [PosMulMono α] (ha : 0 ≤ a) (hb : b ≤ 0) : a * b ≤ 0 
goal: a * b ≤ 0

full_name: Right.mul_nonneg
code: /-- Assumes right covariance. -/
theorem Right.mul_nonneg [MulPosMono α] (ha : 0 ≤ a) (hb : 0 ≤ b) : 0 ≤ a * b 
goal: 0 ≤ a * b

full_name: mul_nonpos_of_nonpos_of_nonneg
code: theorem mul_nonpos_of_nonpos_of_nonneg [MulPosMono α] (ha : a ≤ 0) (hb : 0 ≤ b) : a * b ≤ 0 
goal: a * b ≤ 0

full_name: pos_of_mul_pos_right
code: theorem pos_of_mul_pos_right [PosMulReflectLT α] (h : 0 < a * b) (ha : 0 ≤ a) : 0 < b 
goal: 0 < b

full_name: pos_of_mul_pos_left
code: theorem pos_of_mul_pos_left [MulPosReflectLT α] (h : 0 < a * b) (hb : 0 ≤ b) : 0 < a 
goal: 0 < a

full_name: pos_iff_pos_of_mul_pos
code: theorem pos_iff_pos_of_mul_pos [PosMulReflectLT α] [MulPosReflectLT α] (hab : 0 < a * b) :
    0 < a ↔ 0 < b 
goal: 0 < a ↔ 0 < b

full_name: Left.mul_lt_mul_of_nonneg
code: /-- Assumes left strict covariance. -/
theorem Left.mul_lt_mul_of_nonneg [PosMulStrictMono α] [MulPosMono α]
    (h₁ : a < b) (h₂ : c < d) (a0 : 0 ≤ a) (c0 : 0 ≤ c) : a * c < b * d 
goal: a * c < b * d

full_name: Right.mul_lt_mul_of_nonneg
code: /-- Assumes right strict covariance. -/
theorem Right.mul_lt_mul_of_nonneg [PosMulMono α] [MulPosStrictMono α]
    (h₁ : a < b) (h₂ : c < d) (a0 : 0 ≤ a) (c0 : 0 ≤ c) : a * c < b * d 
goal: a * c < b * d

full_name: mul_self_le_mul_self
code: theorem mul_self_le_mul_self [PosMulMono α] [MulPosMono α] (ha : 0 ≤ a) (hab : a ≤ b) :
    a * a ≤ b * b 
goal: a * a ≤ b * b

full_name: posMulMono_iff_covariant_pos
code: theorem posMulMono_iff_covariant_pos :
    PosMulMono α ↔ CovariantClass α>0 α (fun x y => x * y) (· ≤ ·) 
goal: PosMulMono α ↔ CovariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x ≤ x_1

full_name: mulPosMono_iff_covariant_pos
code: theorem mulPosMono_iff_covariant_pos :
    MulPosMono α ↔ CovariantClass α>0 α (fun x y => y * x) (· ≤ ·) 
goal: MulPosMono α ↔ CovariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x ≤ x_1

full_name: posMulReflectLT_iff_contravariant_pos
code: theorem posMulReflectLT_iff_contravariant_pos :
    PosMulReflectLT α ↔ ContravariantClass α>0 α (fun x y => x * y) (· < ·) 
goal: PosMulReflectLT α ↔ ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1

full_name: mulPosReflectLT_iff_contravariant_pos
code: theorem mulPosReflectLT_iff_contravariant_pos :
    MulPosReflectLT α ↔ ContravariantClass α>0 α (fun x y => y * x) (· < ·) 
goal: MulPosReflectLT α ↔ ContravariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x < x_1

full_name: PosMulStrictMono.toPosMulMono
code: instance (priority := 100) PosMulStrictMono.toPosMulMono [PosMulStrictMono α] : PosMulMono α 
goal: PosMulMono α

full_name: MulPosStrictMono.toMulPosMono
code: instance (priority := 100) MulPosStrictMono.toMulPosMono [MulPosStrictMono α] : MulPosMono α 
goal: MulPosMono α

full_name: PosMulReflectLE.toPosMulReflectLT
code: instance (priority := 100) PosMulReflectLE.toPosMulReflectLT [PosMulReflectLE α] :
    PosMulReflectLT α 
goal: PosMulReflectLT α

full_name: MulPosReflectLE.toMulPosReflectLT
code: instance (priority := 100) MulPosReflectLE.toMulPosReflectLT [MulPosReflectLE α] :
    MulPosReflectLT α 
goal: MulPosReflectLT α

full_name: mul_left_cancel_iff_of_pos
code: theorem mul_left_cancel_iff_of_pos [PosMulReflectLE α] (a0 : 0 < a) : a * b = a * c ↔ b = c 
goal: a * b = a * c ↔ b = c

full_name: mul_right_cancel_iff_of_pos
code: theorem mul_right_cancel_iff_of_pos [MulPosReflectLE α] (b0 : 0 < b) : a * b = c * b ↔ a = c 
goal: a * b = c * b ↔ a = c

full_name: mul_eq_mul_iff_eq_and_eq_of_pos
code: theorem mul_eq_mul_iff_eq_and_eq_of_pos [PosMulStrictMono α] [MulPosStrictMono α]
    (hab : a ≤ b) (hcd : c ≤ d) (a0 : 0 < a) (d0 : 0 < d) :
    a * c = b * d ↔ a = b ∧ c = d 
goal: a * c = b * d ↔ a = b ∧ c = d

full_name: mul_eq_mul_iff_eq_and_eq_of_pos'
code: theorem mul_eq_mul_iff_eq_and_eq_of_pos' [PosMulStrictMono α] [MulPosStrictMono α]
    (hab : a ≤ b) (hcd : c ≤ d) (b0 : 0 < b) (c0 : 0 < c) :
    a * c = b * d ↔ a = b ∧ c = d 
goal: a * c = b * d ↔ a = b ∧ c = d

full_name: pos_and_pos_or_neg_and_neg_of_mul_pos
code: theorem pos_and_pos_or_neg_and_neg_of_mul_pos [PosMulMono α] [MulPosMono α] (hab : 0 < a * b) :
    0 < a ∧ 0 < b ∨ a < 0 ∧ b < 0 
goal: 0 < a ∧ 0 < b ∨ a < 0 ∧ b < 0

full_name: neg_of_mul_pos_right
code: theorem neg_of_mul_pos_right [PosMulMono α] [MulPosMono α] (h : 0 < a * b) (ha : a ≤ 0) : b < 0 
goal: b < 0

full_name: neg_of_mul_pos_left
code: theorem neg_of_mul_pos_left [PosMulMono α] [MulPosMono α] (h : 0 < a * b) (ha : b ≤ 0) : a < 0 
goal: a < 0

full_name: neg_iff_neg_of_mul_pos
code: theorem neg_iff_neg_of_mul_pos [PosMulMono α] [MulPosMono α] (hab : 0 < a * b) : a < 0 ↔ b < 0 
goal: a < 0 ↔ b < 0

full_name: Left.neg_of_mul_neg_right
code: theorem Left.neg_of_mul_neg_right [PosMulMono α] (h : a * b < 0) (a0 : 0 ≤ a) : b < 0 
goal: b < 0

full_name: Right.neg_of_mul_neg_right
code: theorem Right.neg_of_mul_neg_right [MulPosMono α] (h : a * b < 0) (a0 : 0 ≤ a) : b < 0 
goal: b < 0

full_name: Left.neg_of_mul_neg_left
code: theorem Left.neg_of_mul_neg_left [PosMulMono α] (h : a * b < 0) (b0 : 0 ≤ b) : a < 0 
goal: a < 0

full_name: Right.neg_of_mul_neg_left
code: theorem Right.neg_of_mul_neg_left [MulPosMono α] (h : a * b < 0) (b0 : 0 ≤ b) : a < 0 
goal: a < 0

full_name: le_mul_iff_one_le_right
code: @[simp]
lemma le_mul_iff_one_le_right [PosMulMono α] [PosMulReflectLE α] (a0 : 0 < a) : a ≤ a * b ↔ 1 ≤ b 
goal: a ≤ a * b ↔ 1 ≤ b

full_name: lt_mul_iff_one_lt_right
code: @[simp]
theorem lt_mul_iff_one_lt_right [PosMulStrictMono α] [PosMulReflectLT α] (a0 : 0 < a) :
    a < a * b ↔ 1 < b 
goal: a < a * b ↔ 1 < b

full_name: mul_le_iff_le_one_right
code: @[simp]
lemma mul_le_iff_le_one_right [PosMulMono α] [PosMulReflectLE α] (a0 : 0 < a) : a * b ≤ a ↔ b ≤ 1 
goal: a * b ≤ a ↔ b ≤ 1

full_name: mul_lt_iff_lt_one_right
code: @[simp]
theorem mul_lt_iff_lt_one_right [PosMulStrictMono α] [PosMulReflectLT α] (a0 : 0 < a) :
    a * b < a ↔ b < 1 
goal: a * b < a ↔ b < 1

full_name: le_mul_iff_one_le_left
code: @[simp]
lemma le_mul_iff_one_le_left [MulPosMono α] [MulPosReflectLE α] (a0 : 0 < a) : a ≤ b * a ↔ 1 ≤ b 
goal: a ≤ b * a ↔ 1 ≤ b

full_name: lt_mul_iff_one_lt_left
code: @[simp]
theorem lt_mul_iff_one_lt_left [MulPosStrictMono α] [MulPosReflectLT α] (a0 : 0 < a) :
    a < b * a ↔ 1 < b 
goal: a < b * a ↔ 1 < b

full_name: mul_le_iff_le_one_left
code: @[simp]
lemma mul_le_iff_le_one_left [MulPosMono α] [MulPosReflectLE α] (b0 : 0 < b) : a * b ≤ b ↔ a ≤ 1 
goal: a * b ≤ b ↔ a ≤ 1

full_name: mul_lt_iff_lt_one_left
code: @[simp]
theorem mul_lt_iff_lt_one_left [MulPosStrictMono α] [MulPosReflectLT α] (b0 : 0 < b) :
    a * b < b ↔ a < 1 
goal: a * b < b ↔ a < 1

full_name: mul_le_of_le_one_left
code: theorem mul_le_of_le_one_left [MulPosMono α] (hb : 0 ≤ b) (h : a ≤ 1) : a * b ≤ b 
goal: a * b ≤ b

full_name: le_mul_of_one_le_left
code: theorem le_mul_of_one_le_left [MulPosMono α] (hb : 0 ≤ b) (h : 1 ≤ a) : b ≤ a * b 
goal: b ≤ a * b

full_name: mul_le_of_le_one_right
code: theorem mul_le_of_le_one_right [PosMulMono α] (ha : 0 ≤ a) (h : b ≤ 1) : a * b ≤ a 
goal: a * b ≤ a

full_name: le_mul_of_one_le_right
code: theorem le_mul_of_one_le_right [PosMulMono α] (ha : 0 ≤ a) (h : 1 ≤ b) : a ≤ a * b 
goal: a ≤ a * b

full_name: mul_lt_of_lt_one_left
code: theorem mul_lt_of_lt_one_left [MulPosStrictMono α] (hb : 0 < b) (h : a < 1) : a * b < b 
goal: a * b < b

full_name: lt_mul_of_one_lt_left
code: theorem lt_mul_of_one_lt_left [MulPosStrictMono α] (hb : 0 < b) (h : 1 < a) : b < a * b 
goal: b < a * b

full_name: mul_lt_of_lt_one_right
code: theorem mul_lt_of_lt_one_right [PosMulStrictMono α] (ha : 0 < a) (h : b < 1) : a * b < a 
goal: a * b < a

full_name: lt_mul_of_one_lt_right
code: theorem lt_mul_of_one_lt_right [PosMulStrictMono α] (ha : 0 < a) (h : 1 < b) : a < a * b 
goal: a < a * b

full_name: mul_le_of_le_of_le_one_of_nonneg
code: theorem mul_le_of_le_of_le_one_of_nonneg [PosMulMono α] (h : b ≤ c) (ha : a ≤ 1) (hb : 0 ≤ b) :
    b * a ≤ c 
goal: b * a ≤ c

full_name: mul_lt_of_le_of_lt_one_of_pos
code: theorem mul_lt_of_le_of_lt_one_of_pos [PosMulStrictMono α] (bc : b ≤ c) (ha : a < 1) (b0 : 0 < b) :
    b * a < c 
goal: b * a < c

full_name: mul_lt_of_lt_of_le_one_of_nonneg
code: theorem mul_lt_of_lt_of_le_one_of_nonneg [PosMulMono α] (h : b < c) (ha : a ≤ 1) (hb : 0 ≤ b) :
    b * a < c 
goal: b * a < c

full_name: Left.mul_le_one_of_le_of_le
code: /-- Assumes left covariance. -/
theorem Left.mul_le_one_of_le_of_le [PosMulMono α] (ha : a ≤ 1) (hb : b ≤ 1) (a0 : 0 ≤ a) :
    a * b ≤ 1 
goal: a * b ≤ 1

full_name: Left.mul_lt_of_le_of_lt_one_of_pos
code: /-- Assumes left covariance. -/
theorem Left.mul_lt_of_le_of_lt_one_of_pos [PosMulStrictMono α] (ha : a ≤ 1) (hb : b < 1)
    (a0 : 0 < a) : a * b < 1 
goal: a * b < 1

full_name: Left.mul_lt_of_lt_of_le_one_of_nonneg
code: /-- Assumes left covariance. -/
theorem Left.mul_lt_of_lt_of_le_one_of_nonneg [PosMulMono α] (ha : a < 1) (hb : b ≤ 1)
    (a0 : 0 ≤ a) : a * b < 1 
goal: a * b < 1

full_name: mul_le_of_le_of_le_one'
code: theorem mul_le_of_le_of_le_one' [PosMulMono α] [MulPosMono α] (bc : b ≤ c) (ha : a ≤ 1) (a0 : 0 ≤ a)
    (c0 : 0 ≤ c) : b * a ≤ c 
goal: b * a ≤ c

full_name: mul_lt_of_lt_of_le_one'
code: theorem mul_lt_of_lt_of_le_one' [PosMulMono α] [MulPosStrictMono α] (bc : b < c) (ha : a ≤ 1)
    (a0 : 0 < a) (c0 : 0 ≤ c) : b * a < c 
goal: b * a < c

full_name: mul_lt_of_le_of_lt_one'
code: theorem mul_lt_of_le_of_lt_one' [PosMulStrictMono α] [MulPosMono α] (bc : b ≤ c) (ha : a < 1)
    (a0 : 0 ≤ a) (c0 : 0 < c) : b * a < c 
goal: b * a < c

full_name: mul_lt_of_lt_of_lt_one_of_pos
code: theorem mul_lt_of_lt_of_lt_one_of_pos [PosMulMono α] [MulPosStrictMono α] (bc : b < c) (ha : a ≤ 1)
    (a0 : 0 < a) (c0 : 0 ≤ c) : b * a < c 
goal: b * a < c

full_name: le_mul_of_le_of_one_le_of_nonneg
code: theorem le_mul_of_le_of_one_le_of_nonneg [PosMulMono α] (h : b ≤ c) (ha : 1 ≤ a) (hc : 0 ≤ c) :
    b ≤ c * a 
goal: b ≤ c * a

full_name: lt_mul_of_le_of_one_lt_of_pos
code: theorem lt_mul_of_le_of_one_lt_of_pos [PosMulStrictMono α] (bc : b ≤ c) (ha : 1 < a) (c0 : 0 < c) :
    b < c * a 
goal: b < c * a

full_name: lt_mul_of_lt_of_one_le_of_nonneg
code: theorem lt_mul_of_lt_of_one_le_of_nonneg [PosMulMono α] (h : b < c) (ha : 1 ≤ a) (hc : 0 ≤ c) :
    b < c * a 
goal: b < c * a

full_name: Left.one_le_mul_of_le_of_le
code: /-- Assumes left covariance. -/
theorem Left.one_le_mul_of_le_of_le [PosMulMono α] (ha : 1 ≤ a) (hb : 1 ≤ b) (a0 : 0 ≤ a) :
    1 ≤ a * b 
goal: 1 ≤ a * b

full_name: Left.one_lt_mul_of_le_of_lt_of_pos
code: /-- Assumes left covariance. -/
theorem Left.one_lt_mul_of_le_of_lt_of_pos [PosMulStrictMono α] (ha : 1 ≤ a) (hb : 1 < b)
    (a0 : 0 < a) : 1 < a * b 
goal: 1 < a * b

full_name: Left.lt_mul_of_lt_of_one_le_of_nonneg
code: /-- Assumes left covariance. -/
theorem Left.lt_mul_of_lt_of_one_le_of_nonneg [PosMulMono α] (ha : 1 < a) (hb : 1 ≤ b)
    (a0 : 0 ≤ a) : 1 < a * b 
goal: 1 < a * b

full_name: le_mul_of_le_of_one_le'
code: theorem le_mul_of_le_of_one_le' [PosMulMono α] [MulPosMono α] (bc : b ≤ c) (ha : 1 ≤ a)
    (a0 : 0 ≤ a) (b0 : 0 ≤ b) : b ≤ c * a 
goal: b ≤ c * a

full_name: lt_mul_of_le_of_one_lt'
code: theorem lt_mul_of_le_of_one_lt' [PosMulStrictMono α] [MulPosMono α] (bc : b ≤ c) (ha : 1 < a)
    (a0 : 0 ≤ a) (b0 : 0 < b) : b < c * a 
goal: b < c * a

full_name: lt_mul_of_lt_of_one_le'
code: theorem lt_mul_of_lt_of_one_le' [PosMulMono α] [MulPosStrictMono α] (bc : b < c) (ha : 1 ≤ a)
    (a0 : 0 < a) (b0 : 0 ≤ b) : b < c * a 
goal: b < c * a

full_name: lt_mul_of_lt_of_one_lt_of_pos
code: theorem lt_mul_of_lt_of_one_lt_of_pos [PosMulStrictMono α] [MulPosStrictMono α] (bc : b < c)
    (ha : 1 < a) (a0 : 0 < a) (b0 : 0 < b) : b < c * a 
goal: b < c * a

full_name: mul_le_of_le_one_of_le_of_nonneg
code: theorem mul_le_of_le_one_of_le_of_nonneg [MulPosMono α] (ha : a ≤ 1) (h : b ≤ c) (hb : 0 ≤ b) :
    a * b ≤ c 
goal: a * b ≤ c

full_name: mul_lt_of_lt_one_of_le_of_pos
code: theorem mul_lt_of_lt_one_of_le_of_pos [MulPosStrictMono α] (ha : a < 1) (h : b ≤ c) (hb : 0 < b) :
    a * b < c 
goal: a * b < c

full_name: mul_lt_of_le_one_of_lt_of_nonneg
code: theorem mul_lt_of_le_one_of_lt_of_nonneg [MulPosMono α] (ha : a ≤ 1) (h : b < c) (hb : 0 ≤ b) :
    a * b < c 
goal: a * b < c

full_name: Right.mul_lt_one_of_lt_of_le_of_pos
code: /-- Assumes right covariance. -/
theorem Right.mul_lt_one_of_lt_of_le_of_pos [MulPosStrictMono α] (ha : a < 1) (hb : b ≤ 1)
    (b0 : 0 < b) : a * b < 1 
goal: a * b < 1

full_name: Right.mul_lt_one_of_le_of_lt_of_nonneg
code: /-- Assumes right covariance. -/
theorem Right.mul_lt_one_of_le_of_lt_of_nonneg [MulPosMono α] (ha : a ≤ 1) (hb : b < 1)
    (b0 : 0 ≤ b) : a * b < 1 
goal: a * b < 1

full_name: mul_lt_of_lt_one_of_lt_of_pos
code: theorem mul_lt_of_lt_one_of_lt_of_pos [PosMulStrictMono α] [MulPosStrictMono α] (ha : a < 1)
    (bc : b < c) (a0 : 0 < a) (c0 : 0 < c) : a * b < c 
goal: a * b < c

full_name: Right.mul_le_one_of_le_of_le
code: /-- Assumes right covariance. -/
theorem Right.mul_le_one_of_le_of_le [MulPosMono α] (ha : a ≤ 1) (hb : b ≤ 1) (b0 : 0 ≤ b) :
    a * b ≤ 1 
goal: a * b ≤ 1

full_name: mul_le_of_le_one_of_le'
code: theorem mul_le_of_le_one_of_le' [PosMulMono α] [MulPosMono α] (ha : a ≤ 1) (bc : b ≤ c) (a0 : 0 ≤ a)
    (c0 : 0 ≤ c) : a * b ≤ c 
goal: a * b ≤ c

full_name: mul_lt_of_lt_one_of_le'
code: theorem mul_lt_of_lt_one_of_le' [PosMulMono α] [MulPosStrictMono α] (ha : a < 1) (bc : b ≤ c)
    (a0 : 0 ≤ a) (c0 : 0 < c) : a * b < c 
goal: a * b < c

full_name: mul_lt_of_le_one_of_lt'
code: theorem mul_lt_of_le_one_of_lt' [PosMulStrictMono α] [MulPosMono α] (ha : a ≤ 1) (bc : b < c)
    (a0 : 0 < a) (c0 : 0 ≤ c) : a * b < c 
goal: a * b < c

full_name: lt_mul_of_one_lt_of_le_of_pos
code: theorem lt_mul_of_one_lt_of_le_of_pos [MulPosStrictMono α] (ha : 1 < a) (h : b ≤ c) (hc : 0 < c) :
    b < a * c 
goal: b < a * c

full_name: lt_mul_of_one_le_of_lt_of_nonneg
code: theorem lt_mul_of_one_le_of_lt_of_nonneg [MulPosMono α] (ha : 1 ≤ a) (h : b < c) (hc : 0 ≤ c) :
    b < a * c 
goal: b < a * c

full_name: lt_mul_of_one_lt_of_lt_of_pos
code: theorem lt_mul_of_one_lt_of_lt_of_pos [MulPosStrictMono α] (ha : 1 < a) (h : b < c) (hc : 0 < c) :
    b < a * c 
goal: b < a * c

full_name: Right.one_lt_mul_of_lt_of_le_of_pos
code: /-- Assumes right covariance. -/
theorem Right.one_lt_mul_of_lt_of_le_of_pos [MulPosStrictMono α] (ha : 1 < a) (hb : 1 ≤ b)
    (b0 : 0 < b) : 1 < a * b 
goal: 1 < a * b

full_name: Right.one_lt_mul_of_le_of_lt_of_nonneg
code: /-- Assumes right covariance. -/
theorem Right.one_lt_mul_of_le_of_lt_of_nonneg [MulPosMono α] (ha : 1 ≤ a) (hb : 1 < b)
    (b0 : 0 ≤ b) : 1 < a * b 
goal: 1 < a * b

full_name: Right.one_lt_mul_of_lt_of_lt
code: /-- Assumes right covariance. -/
theorem Right.one_lt_mul_of_lt_of_lt [MulPosStrictMono α] (ha : 1 < a) (hb : 1 < b) (b0 : 0 < b) :
    1 < a * b 
goal: 1 < a * b

full_name: lt_mul_of_one_lt_of_lt_of_nonneg
code: theorem lt_mul_of_one_lt_of_lt_of_nonneg [MulPosMono α] (ha : 1 ≤ a) (h : b < c) (hc : 0 ≤ c) :
    b < a * c 
goal: b < a * c

full_name: lt_of_mul_lt_of_one_le_of_nonneg_left
code: theorem lt_of_mul_lt_of_one_le_of_nonneg_left [PosMulMono α] (h : a * b < c) (hle : 1 ≤ b)
    (ha : 0 ≤ a) : a < c 
goal: a < c

full_name: lt_of_lt_mul_of_le_one_of_nonneg_left
code: theorem lt_of_lt_mul_of_le_one_of_nonneg_left [PosMulMono α] (h : a < b * c) (hc : c ≤ 1)
    (hb : 0 ≤ b) : a < b 
goal: a < b

full_name: lt_of_lt_mul_of_le_one_of_nonneg_right
code: theorem lt_of_lt_mul_of_le_one_of_nonneg_right [MulPosMono α] (h : a < b * c) (hb : b ≤ 1)
    (hc : 0 ≤ c) : a < c 
goal: a < c

full_name: le_mul_of_one_le_of_le_of_nonneg
code: theorem le_mul_of_one_le_of_le_of_nonneg [MulPosMono α] (ha : 1 ≤ a) (bc : b ≤ c) (c0 : 0 ≤ c) :
    b ≤ a * c 
goal: b ≤ a * c

full_name: Right.one_le_mul_of_le_of_le
code: /-- Assumes right covariance. -/
theorem Right.one_le_mul_of_le_of_le [MulPosMono α] (ha : 1 ≤ a) (hb : 1 ≤ b) (b0 : 0 ≤ b) :
    1 ≤ a * b 
goal: 1 ≤ a * b

full_name: le_of_mul_le_of_one_le_of_nonneg_left
code: theorem le_of_mul_le_of_one_le_of_nonneg_left [PosMulMono α] (h : a * b ≤ c) (hb : 1 ≤ b)
    (ha : 0 ≤ a) : a ≤ c 
goal: a ≤ c

full_name: le_of_le_mul_of_le_one_of_nonneg_left
code: theorem le_of_le_mul_of_le_one_of_nonneg_left [PosMulMono α] (h : a ≤ b * c) (hc : c ≤ 1)
    (hb : 0 ≤ b) : a ≤ b 
goal: a ≤ b

full_name: le_of_mul_le_of_one_le_nonneg_right
code: theorem le_of_mul_le_of_one_le_nonneg_right [MulPosMono α] (h : a * b ≤ c) (ha : 1 ≤ a)
    (hb : 0 ≤ b) : b ≤ c 
goal: b ≤ c

full_name: le_of_le_mul_of_le_one_of_nonneg_right
code: theorem le_of_le_mul_of_le_one_of_nonneg_right [MulPosMono α] (h : a ≤ b * c) (hb : b ≤ 1)
    (hc : 0 ≤ c) : a ≤ c 
goal: a ≤ c

full_name: exists_square_le'
code: theorem exists_square_le' [PosMulStrictMono α] (a0 : 0 < a) : ∃ b : α, b * b ≤ a 
goal: ∃ b, b * b ≤ a

full_name: PosMulMono.toPosMulStrictMono
code: theorem PosMulMono.toPosMulStrictMono [PosMulMono α] : PosMulStrictMono α 
goal: PosMulStrictMono α

full_name: posMulMono_iff_posMulStrictMono
code: theorem posMulMono_iff_posMulStrictMono : PosMulMono α ↔ PosMulStrictMono α 
goal: PosMulMono α ↔ PosMulStrictMono α

full_name: MulPosMono.toMulPosStrictMono
code: theorem MulPosMono.toMulPosStrictMono [MulPosMono α] : MulPosStrictMono α 
goal: MulPosStrictMono α

full_name: mulPosMono_iff_mulPosStrictMono
code: theorem mulPosMono_iff_mulPosStrictMono : MulPosMono α ↔ MulPosStrictMono α 
goal: MulPosMono α ↔ MulPosStrictMono α

full_name: PosMulReflectLT.toPosMulReflectLE
code: theorem PosMulReflectLT.toPosMulReflectLE [PosMulReflectLT α] : PosMulReflectLE α 
goal: PosMulReflectLE α

full_name: posMulReflectLE_iff_posMulReflectLT
code: theorem posMulReflectLE_iff_posMulReflectLT : PosMulReflectLE α ↔ PosMulReflectLT α 
goal: PosMulReflectLE α ↔ PosMulReflectLT α

full_name: MulPosReflectLT.toMulPosReflectLE
code: theorem MulPosReflectLT.toMulPosReflectLE [MulPosReflectLT α] : MulPosReflectLE α 
goal: MulPosReflectLE α

full_name: mulPosReflectLE_iff_mulPosReflectLT
code: theorem mulPosReflectLE_iff_mulPosReflectLT : MulPosReflectLE α ↔ MulPosReflectLT α 
goal: MulPosReflectLE α ↔ MulPosReflectLT α

full_name: posMulStrictMono_iff_mulPosStrictMono
code: theorem posMulStrictMono_iff_mulPosStrictMono : PosMulStrictMono α ↔ MulPosStrictMono α 
goal: PosMulStrictMono α ↔ MulPosStrictMono α

full_name: posMulReflectLT_iff_mulPosReflectLT
code: theorem posMulReflectLT_iff_mulPosReflectLT : PosMulReflectLT α ↔ MulPosReflectLT α 
goal: PosMulReflectLT α ↔ MulPosReflectLT α

full_name: posMulMono_iff_mulPosMono
code: theorem posMulMono_iff_mulPosMono : PosMulMono α ↔ MulPosMono α 
goal: PosMulMono α ↔ MulPosMono α

full_name: posMulReflectLE_iff_mulPosReflectLE
code: theorem posMulReflectLE_iff_mulPosReflectLE : PosMulReflectLE α ↔ MulPosReflectLE α 
goal: PosMulReflectLE α ↔ MulPosReflectLE α