Theorem: StarOrderedRing.mul_le_mul_of_nonneg_left
File: Mathlib/Algebra/Order/Ring/Star.lean

tactic: rw [StarOrderedRing.nonneg_iff] at hc
state_before: R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
hc : 0 ≤ c
⊢ c * a ≤ c * b
state_after: R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
hc : c ∈ AddSubmonoid.closure (Set.range fun s => star s * s)
⊢ c * a ≤ c * b

tactic: induction hc using AddSubmonoid.closure_induction' with
| mem _ h =>
  obtain ⟨x, rfl⟩ := h
  simp_rw [mul_assoc, mul_comm x, ← mul_assoc]
  exact conjugate_le_conjugate hab x
| one => simp
| mul x hx y hy =>
  simp only [← nonneg_iff, add_mul] at hx hy ⊢
  apply add_le_add <;> aesop
state_before: R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
hc : c ∈ AddSubmonoid.closure (Set.range fun s => star s * s)
⊢ c * a ≤ c * b
state_after: no goals

tactic: obtain ⟨x, rfl⟩ := h
state_before: case mem
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x✝ : R
h : x✝ ∈ Set.range fun s => star s * s
⊢ x✝ * a ≤ x✝ * b
state_after: case mem.intro
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x : R
⊢ (fun s => star s * s) x * a ≤ (fun s => star s * s) x * b

tactic: simp_rw [mul_assoc, mul_comm x, ← mul_assoc]
state_before: case mem.intro
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x : R
⊢ (fun s => star s * s) x * a ≤ (fun s => star s * s) x * b
state_after: case mem.intro
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x : R
⊢ star x * a * x ≤ star x * b * x

tactic: exact conjugate_le_conjugate hab x
state_before: case mem.intro
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x : R
⊢ star x * a * x ≤ star x * b * x
state_after: no goals

tactic: simp
state_before: case one
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
⊢ 0 * a ≤ 0 * b
state_after: no goals

tactic: simp only [← nonneg_iff, add_mul] at hx hy ⊢
state_before: case mul
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x : R
hx : x ∈ AddSubmonoid.closure (Set.range fun s => star s * s)
y : R
hy : y ∈ AddSubmonoid.closure (Set.range fun s => star s * s)
a✝¹ : x * a ≤ x * b
a✝ : y * a ≤ y * b
⊢ (x + y) * a ≤ (x + y) * b
state_after: case mul
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x y : R
a✝¹ : x * a ≤ x * b
a✝ : y * a ≤ y * b
hx : 0 ≤ x
hy : 0 ≤ y
⊢ x * a + y * a ≤ x * b + y * b

tactic: apply add_le_add <;> aesop
state_before: case mul
R : Type u_1
inst✝³ : CommSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
a b c : R
hab : a ≤ b
x y : R
a✝¹ : x * a ≤ x * b
a✝ : y * a ≤ y * b
hx : 0 ≤ x
hy : 0 ≤ y
⊢ x * a + y * a ≤ x * b + y * b
state_after: no goals