[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : PosMulStrictMono α
ha : 0 < a
hb : 0 < b
⊢ 0 < a * b
[PROOFSTEP]
simpa only [mul_zero] using mul_lt_mul_of_pos_left hb ha
[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : PosMulStrictMono α
ha : 0 < a
hb : b < 0
⊢ a * b < 0
[PROOFSTEP]
simpa only [mul_zero] using mul_lt_mul_of_pos_left hb ha
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : Preorder α
inst✝¹ : PosMulStrictMono α
inst✝ : PosMulReflectLT α
h : 0 < c
⊢ 0 < c * b ↔ 0 < b
[PROOFSTEP]
rw [← mul_zero c, mul_lt_mul_left h]
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : Preorder α
inst✝¹ : PosMulStrictMono α
inst✝ : PosMulReflectLT α
h : 0 < c
⊢ 0 < b ↔ c * 0 < b
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : MulPosStrictMono α
ha : 0 < a
hb : 0 < b
⊢ 0 < a * b
[PROOFSTEP]
simpa only [zero_mul] using mul_lt_mul_of_pos_right ha hb
[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : MulPosStrictMono α
ha : a < 0
hb : 0 < b
⊢ a * b < 0
[PROOFSTEP]
simpa only [zero_mul] using mul_lt_mul_of_pos_right ha hb
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : Preorder α
inst✝¹ : MulPosStrictMono α
inst✝ : MulPosReflectLT α
h : 0 < c
⊢ 0 < b * c ↔ 0 < b
[PROOFSTEP]
rw [← zero_mul c, mul_lt_mul_right h]
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : Preorder α
inst✝¹ : MulPosStrictMono α
inst✝ : MulPosReflectLT α
h : 0 < c
⊢ 0 < b ↔ 0 * c < b
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : PosMulMono α
ha : 0 ≤ a
hb : 0 ≤ b
⊢ 0 ≤ a * b
[PROOFSTEP]
simpa only [mul_zero] using mul_le_mul_of_nonneg_left hb ha
[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : PosMulMono α
ha : 0 ≤ a
hb : b ≤ 0
⊢ a * b ≤ 0
[PROOFSTEP]
simpa only [mul_zero] using mul_le_mul_of_nonneg_left hb ha
[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : MulPosMono α
ha : 0 ≤ a
hb : 0 ≤ b
⊢ 0 ≤ a * b
[PROOFSTEP]
simpa only [zero_mul] using mul_le_mul_of_nonneg_right ha hb
[GOAL]
α : Type u_1
a b c d : α
inst✝² : MulZeroClass α
inst✝¹ : Preorder α
inst✝ : MulPosMono α
ha : a ≤ 0
hb : 0 ≤ b
⊢ a * b ≤ 0
[PROOFSTEP]
simpa only [zero_mul] using mul_le_mul_of_nonneg_right ha hb
[GOAL]
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : CovariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x ≤ x_1
a : { x // 0 ≤ x }
b c : α
h : b ≤ c
⊢ ↑a * b ≤ ↑a * c
[PROOFSTEP]
obtain ha | ha := a.prop.eq_or_lt
[GOAL]
case inl
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : CovariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x ≤ x_1
a : { x // 0 ≤ x }
b c : α
h : b ≤ c
ha : 0 = ↑a
⊢ ↑a * b ≤ ↑a * c
[PROOFSTEP]
simp [← ha]
[GOAL]
case inr
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : CovariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x ≤ x_1
a : { x // 0 ≤ x }
b c : α
h : b ≤ c
ha : 0 < ↑a
⊢ ↑a * b ≤ ↑a * c
[PROOFSTEP]
exact @CovariantClass.elim α>0 α (fun x y => x * y) (· ≤ ·) _ ⟨_, ha⟩ _ _ h
[GOAL]
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : CovariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x ≤ x_1
a : { x // 0 ≤ x }
b c : α
h : b ≤ c
⊢ b * ↑a ≤ c * ↑a
[PROOFSTEP]
obtain ha | ha := a.prop.eq_or_lt
[GOAL]
case inl
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : CovariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x ≤ x_1
a : { x // 0 ≤ x }
b c : α
h : b ≤ c
ha : 0 = ↑a
⊢ b * ↑a ≤ c * ↑a
[PROOFSTEP]
simp [← ha]
[GOAL]
case inr
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : CovariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x ≤ x_1
a : { x // 0 ≤ x }
b c : α
h : b ≤ c
ha : 0 < ↑a
⊢ b * ↑a ≤ c * ↑a
[PROOFSTEP]
exact @CovariantClass.elim α>0 α (fun x y => y * x) (· ≤ ·) _ ⟨_, ha⟩ _ _ h
[GOAL]
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : ↑a * b < ↑a * c
⊢ b < c
[PROOFSTEP]
obtain ha | ha := a.prop.eq_or_lt
[GOAL]
case inl
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : ↑a * b < ↑a * c
ha : 0 = ↑a
⊢ b < c
[PROOFSTEP]
simp [← ha] at h
[GOAL]
case inr
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => ↑x * y) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : ↑a * b < ↑a * c
ha : 0 < ↑a
⊢ b < c
[PROOFSTEP]
exact @ContravariantClass.elim α>0 α (fun x y => x * y) (· < ·) _ ⟨_, ha⟩ _ _ h
[GOAL]
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : b * ↑a < c * ↑a
⊢ b < c
[PROOFSTEP]
obtain ha | ha := a.prop.eq_or_lt
[GOAL]
case inl
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : b * ↑a < c * ↑a
ha : 0 = ↑a
⊢ b < c
[PROOFSTEP]
simp [← ha] at h
[GOAL]
case inr
α : Type u_1
a✝ b✝ c✝ d : α
inst✝¹ : MulZeroClass α
inst✝ : PartialOrder α
h✝ : ContravariantClass { x // 0 < x } α (fun x y => y * ↑x) fun x x_1 => x < x_1
a : { x // 0 ≤ x }
b c : α
h : b * ↑a < c * ↑a
ha : 0 < ↑a
⊢ b < c
[PROOFSTEP]
exact @ContravariantClass.elim α>0 α (fun x y => y * x) (· < ·) _ ⟨_, ha⟩ _ _ h
[GOAL]
α : Type u_1
a✝ b✝ c✝ d : α
inst✝² : MulZeroClass α
inst✝¹ : PartialOrder α
inst✝ : PosMulMonoRev α
a : { x // 0 < x }
b c : α
h : ↑a * b < ↑a * c
⊢ b ≠ c
[PROOFSTEP]
rintro rfl
[GOAL]
α : Type u_1
a✝ b✝ c d : α
inst✝² : MulZeroClass α
inst✝¹ : PartialOrder α
inst✝ : PosMulMonoRev α
a : { x // 0 < x }
b : α
h : ↑a * b < ↑a * b
⊢ False
[PROOFSTEP]
simp at h
[GOAL]
α : Type u_1
a✝ b✝ c✝ d : α
inst✝² : MulZeroClass α
inst✝¹ : PartialOrder α
inst✝ : MulPosMonoRev α
a : { x // 0 < x }
b c : α
h : b * ↑a < c * ↑a
⊢ b ≠ c
[PROOFSTEP]
rintro rfl
[GOAL]
α : Type u_1
a✝ b✝ c d : α
inst✝² : MulZeroClass α
inst✝¹ : PartialOrder α
inst✝ : MulPosMonoRev α
a : { x // 0 < x }
b : α
h : b * ↑a < b * ↑a
⊢ False
[PROOFSTEP]
simp at h
[GOAL]
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac : a ≤ b
hbd : c ≤ d
a0 : 0 < a
d0 : 0 < d
⊢ a * c = b * d ↔ a = b ∧ c = d
[PROOFSTEP]
refine' ⟨fun h => _, fun h => congr_arg₂ (· * ·) h.1 h.2⟩
[GOAL]
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac : a ≤ b
hbd : c ≤ d
a0 : 0 < a
d0 : 0 < d
h : a * c = b * d
⊢ a = b ∧ c = d
[PROOFSTEP]
rcases hac.eq_or_lt with (rfl | hac)
[GOAL]
case inl
α : Type u_1
a c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hbd : c ≤ d
a0 : 0 < a
d0 : 0 < d
hac : a ≤ a
h : a * c = a * d
⊢ a = a ∧ c = d
[PROOFSTEP]
exact ⟨rfl, (mul_left_cancel_iff_of_pos a0).mp h⟩
[GOAL]
case inr
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac✝ : a ≤ b
hbd : c ≤ d
a0 : 0 < a
d0 : 0 < d
h : a * c = b * d
hac : a < b
⊢ a = b ∧ c = d
[PROOFSTEP]
rcases eq_or_lt_of_le hbd with (rfl | hbd)
[GOAL]
case inr.inl
α : Type u_1
a b c : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac✝ : a ≤ b
a0 : 0 < a
hac : a < b
hbd : c ≤ c
d0 : 0 < c
h : a * c = b * c
⊢ a = b ∧ c = c
[PROOFSTEP]
exact ⟨(mul_right_cancel_iff_of_pos d0).mp h, rfl⟩
[GOAL]
case inr.inr
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac✝ : a ≤ b
hbd✝ : c ≤ d
a0 : 0 < a
d0 : 0 < d
h : a * c = b * d
hac : a < b
hbd : c < d
⊢ a = b ∧ c = d
[PROOFSTEP]
exact ((mul_lt_mul_of_pos_of_pos hac hbd a0 d0).ne h).elim
[GOAL]
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac : a ≤ b
hbd : c ≤ d
b0 : 0 < b
c0 : 0 < c
⊢ a * c = b * d ↔ a = b ∧ c = d
[PROOFSTEP]
refine' ⟨fun h => _, fun h => congr_arg₂ (· * ·) h.1 h.2⟩
[GOAL]
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac : a ≤ b
hbd : c ≤ d
b0 : 0 < b
c0 : 0 < c
h : a * c = b * d
⊢ a = b ∧ c = d
[PROOFSTEP]
rcases hac.eq_or_lt with (rfl | hac)
[GOAL]
case inl
α : Type u_1
a c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hbd : c ≤ d
c0 : 0 < c
hac : a ≤ a
b0 : 0 < a
h : a * c = a * d
⊢ a = a ∧ c = d
[PROOFSTEP]
exact ⟨rfl, (mul_left_cancel_iff_of_pos b0).mp h⟩
[GOAL]
case inr
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac✝ : a ≤ b
hbd : c ≤ d
b0 : 0 < b
c0 : 0 < c
h : a * c = b * d
hac : a < b
⊢ a = b ∧ c = d
[PROOFSTEP]
rcases eq_or_lt_of_le hbd with (rfl | hbd)
[GOAL]
case inr.inl
α : Type u_1
a b c : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac✝ : a ≤ b
b0 : 0 < b
c0 : 0 < c
hac : a < b
hbd : c ≤ c
h : a * c = b * c
⊢ a = b ∧ c = c
[PROOFSTEP]
exact ⟨(mul_right_cancel_iff_of_pos c0).mp h, rfl⟩
[GOAL]
case inr.inr
α : Type u_1
a b c d : α
inst✝⁵ : MulZeroClass α
inst✝⁴ : PartialOrder α
inst✝³ : PosMulStrictMono α
inst✝² : MulPosStrictMono α
inst✝¹ : PosMulMonoRev α
inst✝ : MulPosMonoRev α
hac✝ : a ≤ b
hbd✝ : c ≤ d
b0 : 0 < b
c0 : 0 < c
h : a * c = b * d
hac : a < b
hbd : c < d
⊢ a = b ∧ c = d
[PROOFSTEP]
exact ((mul_lt_mul_of_lt_of_lt' hac hbd b0 c0).ne h).elim
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : LinearOrder α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
hab : 0 < a * b
⊢ 0 < a ∧ 0 < b ∨ a < 0 ∧ b < 0
[PROOFSTEP]
rcases lt_trichotomy a 0 with (ha | rfl | ha)
[GOAL]
case inl
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : LinearOrder α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
hab : 0 < a * b
ha : a < 0
⊢ 0 < a ∧ 0 < b ∨ a < 0 ∧ b < 0
[PROOFSTEP]
refine' Or.inr ⟨ha, lt_imp_lt_of_le_imp_le (fun hb => _) hab⟩
[GOAL]
case inl
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : LinearOrder α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
hab : 0 < a * b
ha : a < 0
hb : 0 ≤ b
⊢ a * b ≤ 0
[PROOFSTEP]
exact mul_nonpos_of_nonpos_of_nonneg ha.le hb
[GOAL]
case inr.inl
α : Type u_1
b c d : α
inst✝³ : MulZeroClass α
inst✝² : LinearOrder α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
hab : 0 < 0 * b
⊢ 0 < 0 ∧ 0 < b ∨ 0 < 0 ∧ b < 0
[PROOFSTEP]
rw [zero_mul] at hab
[GOAL]
case inr.inl
α : Type u_1
b c d : α
inst✝³ : MulZeroClass α
inst✝² : LinearOrder α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
hab : 0 < 0
⊢ 0 < 0 ∧ 0 < b ∨ 0 < 0 ∧ b < 0
[PROOFSTEP]
exact hab.false.elim
[GOAL]
case inr.inr
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : LinearOrder α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
hab : 0 < a * b
ha : 0 < a
⊢ 0 < a ∧ 0 < b ∨ a < 0 ∧ b < 0
[PROOFSTEP]
refine' Or.inl ⟨ha, lt_imp_lt_of_le_imp_le (fun hb => _) hab⟩
[GOAL]
case inr.inr
α : Type u_1
a b c d : α
inst✝³ : MulZeroClass α
inst✝² : LinearOrder α
inst✝¹ : PosMulMono α
inst✝ : MulPosMono α
hab : 0 < a * b
ha : 0 < a
hb : b ≤ 0
⊢ a * b ≤ 0
[PROOFSTEP]
exact mul_nonpos_of_nonneg_of_nonpos ha.le hb
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : PosMulMono α
inst✝ : PosMulMonoRev α
a0 : 0 < a
⊢ a ≤ a * b ↔ a * 1 ≤ a * b
[PROOFSTEP]
rw [mul_one]
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : PosMulStrictMono α
inst✝ : PosMulReflectLT α
a0 : 0 < a
⊢ a < a * b ↔ a * 1 < a * b
[PROOFSTEP]
rw [mul_one]
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : PosMulMono α
inst✝ : PosMulMonoRev α
a0 : 0 < a
⊢ a * b ≤ a ↔ a * b ≤ a * 1
[PROOFSTEP]
rw [mul_one]
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : PosMulStrictMono α
inst✝ : PosMulReflectLT α
a0 : 0 < a
⊢ a * b < a ↔ a * b < a * 1
[PROOFSTEP]
rw [mul_one]
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : MulPosMono α
inst✝ : MulPosMonoRev α
a0 : 0 < a
⊢ a ≤ b * a ↔ 1 * a ≤ b * a
[PROOFSTEP]
rw [one_mul]
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : MulPosStrictMono α
inst✝ : MulPosReflectLT α
a0 : 0 < a
⊢ a < b * a ↔ 1 * a < b * a
[PROOFSTEP]
rw [one_mul]
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : MulPosMono α
inst✝ : MulPosMonoRev α
b0 : 0 < b
⊢ a * b ≤ b ↔ a * b ≤ 1 * b
[PROOFSTEP]
rw [one_mul]
[GOAL]
α : Type u_1
a b c d : α
inst✝⁴ : MulOneClass α
inst✝³ : Zero α
inst✝² : Preorder α
inst✝¹ : MulPosStrictMono α
inst✝ : MulPosReflectLT α
b0 : 0 < b
⊢ a * b < b ↔ a * b < 1 * b
[PROOFSTEP]
rw [one_mul]
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : MulPosMono α
hb : 0 ≤ b
h : a ≤ 1
⊢ a * b ≤ b
[PROOFSTEP]
simpa only [one_mul] using mul_le_mul_of_nonneg_right h hb
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : MulPosMono α
hb : 0 ≤ b
h : 1 ≤ a
⊢ b ≤ a * b
[PROOFSTEP]
simpa only [one_mul] using mul_le_mul_of_nonneg_right h hb
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : PosMulMono α
ha : 0 ≤ a
h : b ≤ 1
⊢ a * b ≤ a
[PROOFSTEP]
simpa only [mul_one] using mul_le_mul_of_nonneg_left h ha
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : PosMulMono α
ha : 0 ≤ a
h : 1 ≤ b
⊢ a ≤ a * b
[PROOFSTEP]
simpa only [mul_one] using mul_le_mul_of_nonneg_left h ha
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : MulPosStrictMono α
hb : 0 < b
h : a < 1
⊢ a * b < b
[PROOFSTEP]
simpa only [one_mul] using mul_lt_mul_of_pos_right h hb
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : MulPosStrictMono α
hb : 0 < b
h : 1 < a
⊢ b < a * b
[PROOFSTEP]
simpa only [one_mul] using mul_lt_mul_of_pos_right h hb
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : PosMulStrictMono α
ha : 0 < a
h : b < 1
⊢ a * b < a
[PROOFSTEP]
simpa only [mul_one] using mul_lt_mul_of_pos_left h ha
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : Preorder α
inst✝ : PosMulStrictMono α
ha : 0 < a
h : 1 < b
⊢ a < a * b
[PROOFSTEP]
simpa only [mul_one] using mul_lt_mul_of_pos_left h ha
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : LinearOrder α
inst✝ : PosMulStrictMono α
a0 : 0 < a
⊢ ∃ b, b * b ≤ a
[PROOFSTEP]
obtain ha | ha := lt_or_le a 1
[GOAL]
case inl
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : LinearOrder α
inst✝ : PosMulStrictMono α
a0 : 0 < a
ha : a < 1
⊢ ∃ b, b * b ≤ a
[PROOFSTEP]
exact ⟨a, (mul_lt_of_lt_one_right a0 ha).le⟩
[GOAL]
case inr
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : LinearOrder α
inst✝ : PosMulStrictMono α
a0 : 0 < a
ha : 1 ≤ a
⊢ ∃ b, b * b ≤ a
[PROOFSTEP]
exact ⟨1, by rwa [mul_one]⟩
[GOAL]
α : Type u_1
a b c d : α
inst✝³ : MulOneClass α
inst✝² : Zero α
inst✝¹ : LinearOrder α
inst✝ : PosMulStrictMono α
a0 : 0 < a
ha : 1 ≤ a
⊢ 1 * 1 ≤ a
[PROOFSTEP]
rwa [mul_one]
[GOAL]
α : Type u_1
a b c d : α
inst✝² : CommSemigroup α
inst✝¹ : Zero α
inst✝ : Preorder α
⊢ PosMulStrictMono α ↔ MulPosStrictMono α
[PROOFSTEP]
simp only [PosMulStrictMono, MulPosStrictMono, mul_comm]
[GOAL]
α : Type u_1
a b c d : α
inst✝² : CommSemigroup α
inst✝¹ : Zero α
inst✝ : Preorder α
⊢ PosMulReflectLT α ↔ MulPosReflectLT α
[PROOFSTEP]
simp only [PosMulReflectLT, MulPosReflectLT, mul_comm]
[GOAL]
α : Type u_1
a b c d : α
inst✝² : CommSemigroup α
inst✝¹ : Zero α
inst✝ : Preorder α
⊢ PosMulMono α ↔ MulPosMono α
[PROOFSTEP]
simp only [PosMulMono, MulPosMono, mul_comm]
[GOAL]
α : Type u_1
a b c d : α
inst✝² : CommSemigroup α
inst✝¹ : Zero α
inst✝ : Preorder α
⊢ PosMulMonoRev α ↔ MulPosMonoRev α
[PROOFSTEP]
simp only [PosMulMonoRev, MulPosMonoRev, mul_comm]