Theorem: star_le_star_iff
File: Mathlib/Algebra/Star/Order.lean

tactic: suffices ∀ x y, x ≤ y → star x ≤ star y from
  ⟨by simpa only [star_star] using this (star x) (star y), this x y⟩
state_before: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x y : R
⊢ star x ≤ star y ↔ x ≤ y
state_after: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x y : R
⊢ ∀ (x y : R), x ≤ y → star x ≤ star y

tactic: intro x y h
state_before: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x y : R
⊢ ∀ (x y : R), x ≤ y → star x ≤ star y
state_after: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y✝ x y : R
h : x ≤ y
⊢ star x ≤ star y

tactic: rw [StarOrderedRing.le_iff] at h ⊢
state_before: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y✝ x y : R
h : x ≤ y
⊢ star x ≤ star y
state_after: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y✝ x y : R
h : ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), y = x + p
⊢ ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), star y = star x + p

tactic: obtain ⟨d, hd, rfl⟩ := h
state_before: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y✝ x y : R
h : ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), y = x + p
⊢ ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), star y = star x + p
state_after: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), star (x + d) = star x + p

tactic: refine ⟨starAddEquiv d, ?_, star_add _ _⟩
state_before: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), star (x + d) = star x + p
state_after: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ starAddEquiv d ∈ AddSubmonoid.closure (range fun s => star s * s)

tactic: refine AddMonoidHom.mclosure_preimage_le _ _ <| AddSubmonoid.closure_mono ?_ hd
state_before: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ starAddEquiv d ∈ AddSubmonoid.closure (range fun s => star s * s)
state_after: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ (range fun s => star s * s) ⊆ ⇑starAddEquiv ⁻¹' range fun s => star s * s

tactic: rintro - ⟨s, rfl⟩
state_before: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ (range fun s => star s * s) ⊆ ⇑starAddEquiv ⁻¹' range fun s => star s * s
state_after: case intro.intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
s : R
⊢ (fun s => star s * s) s ∈ ⇑starAddEquiv ⁻¹' range fun s => star s * s

tactic: exact ⟨s, by simp⟩
state_before: case intro.intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
s : R
⊢ (fun s => star s * s) s ∈ ⇑starAddEquiv ⁻¹' range fun s => star s * s
state_after: no goals

tactic: simpa only [star_star] using this (star x) (star y)
state_before: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x y : R
this : ∀ (x y : R), x ≤ y → star x ≤ star y
⊢ star x ≤ star y → x ≤ y
state_after: no goals

tactic: simp
state_before: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x✝ y x d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
s : R
⊢ (fun s => star s * s) s = starAddEquiv ((fun s => star s * s) s)
state_after: no goals