Theorem: IsSelfAdjoint.mono
File: Mathlib/Algebra/Star/Order.lean

Proof steps:
state_before: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x y : R
h : x ≤ y
hx : IsSelfAdjoint x
⊢ IsSelfAdjoint y
state_after: R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x y : R
h : ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), y = x + p
hx : IsSelfAdjoint x
⊢ IsSelfAdjoint 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 : R
h : ∃ p ∈ AddSubmonoid.closure (range fun s => star s * s), y = x + p
hx : IsSelfAdjoint x
⊢ IsSelfAdjoint y
state_after: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ IsSelfAdjoint (x + d)
tactic: obtain ⟨d, hd, rfl⟩ := h
state_before: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ IsSelfAdjoint (x + d)
state_after: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ x + star d = x + d
tactic: rw [IsSelfAdjoint, star_add, hx.star_eq]
state_before: case intro.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ x + star d = x + d
state_after: case intro.intro.e_a
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ star d = d
tactic: congr
state_before: case intro.intro.e_a
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ star d = d
state_after: case intro.intro.e_a
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ EqOn (⇑↑starAddEquiv) (⇑(AddMonoidHom.id R)) (range fun s => star s * s)
tactic: refine AddMonoidHom.eqOn_closureM (f := starAddEquiv (R := R)) (g := .id R) ?_ hd
state_before: case intro.intro.e_a
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
⊢ EqOn (⇑↑starAddEquiv) (⇑(AddMonoidHom.id R)) (range fun s => star s * s)
state_after: case intro.intro.e_a.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
s : R
⊢ ↑starAddEquiv ((fun s => star s * s) s) = (AddMonoidHom.id R) ((fun s => star s * s) s)
tactic: rintro - ⟨s, rfl⟩
state_before: case intro.intro.e_a.intro
R : Type u
inst✝³ : NonUnitalSemiring R
inst✝² : PartialOrder R
inst✝¹ : StarRing R
inst✝ : StarOrderedRing R
x : R
hx : IsSelfAdjoint x
d : R
hd : d ∈ AddSubmonoid.closure (range fun s => star s * s)
s : R
⊢ ↑starAddEquiv ((fun s => star s * s) s) = (AddMonoidHom.id R) ((fun s => star s * s) s)
state_after: no goals
tactic: simp