Skip to content

Commit c2bce15

Browse files
committed
feat: a * b⁻¹ for a b : Aˣ is unitary if star a * a = star b * b (#24858)
1 parent d6c3a2d commit c2bce15

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

Mathlib/Algebra/Star/Unitary.lean

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Shing Tak Lam, Frédéric Dupuis
66
import Mathlib.Algebra.Group.Submonoid.Operations
77
import Mathlib.Algebra.Star.SelfAdjoint
88
import Mathlib.Algebra.Algebra.Spectrum.Basic
9+
import Mathlib.Tactic.ContinuousFunctionalCalculus
910

1011
/-!
1112
# Unitary elements of a star monoid
@@ -135,12 +136,36 @@ theorem _root_.IsUnit.mem_unitary_iff_mul_star_self {u : R} (hu : IsUnit u) :
135136
alias ⟨_, _root_.IsUnit.mem_unitary_of_star_mul_self⟩ := IsUnit.mem_unitary_iff_star_mul_self
136137
alias ⟨_, _root_.IsUnit.mem_unitary_of_mul_star_self⟩ := IsUnit.mem_unitary_iff_mul_star_self
137138

139+
lemma mul_inv_mem_iff {G : Type*} [Group G] [StarMul G] (a b : G) :
140+
a * b⁻¹ ∈ unitary G ↔ star a * a = star b * b := by
141+
rw [(Group.isUnit _).mem_unitary_iff_star_mul_self, star_mul, star_inv, mul_assoc,
142+
inv_mul_eq_iff_eq_mul, mul_one, ← mul_assoc, mul_inv_eq_iff_eq_mul]
143+
144+
lemma inv_mul_mem_iff {G : Type*} [Group G] [StarMul G] (a b : G) :
145+
a⁻¹ * b ∈ unitary G ↔ a * star a = b * star b := by
146+
simpa [← mul_inv_rev] using mul_inv_mem_iff a⁻¹ b⁻¹
147+
148+
theorem _root_.Units.unitary_eq : unitary Rˣ = (unitary R).comap (Units.coeHom R) := by
149+
ext
150+
simp [unitary.mem_iff, Units.ext_iff]
151+
152+
/-- In a star monoid, the product `a * b⁻¹` of units is unitary if `star a * a = star b * b`. -/
153+
protected lemma _root_.Units.mul_inv_mem_unitary (a b : Rˣ) :
154+
(a * b⁻¹ : R) ∈ unitary R ↔ star a * a = star b * b := by
155+
simp [← mul_inv_mem_iff, Units.unitary_eq]
156+
157+
/-- In a star monoid, the product `a⁻¹ * b` of units is unitary if `a * star a = b * star b`. -/
158+
protected lemma _root_.Units.inv_mul_mem_unitary (a b : Rˣ) :
159+
(a⁻¹ * b : R) ∈ unitary R ↔ a * star a = b * star b := by
160+
simp [← inv_mul_mem_iff, Units.unitary_eq]
161+
138162
instance instIsStarNormal (u : unitary R) : IsStarNormal u where
139163
star_comm_self := star_mul_self u |>.trans <| (mul_star_self u).symm
140164

141165
instance coe_isStarNormal (u : unitary R) : IsStarNormal (u : R) where
142166
star_comm_self := congr(Subtype.val $(star_comm_self' u))
143167

168+
@[aesop 10% apply (rule_sets := [CStarAlgebra])]
144169
lemma _root_.isStarNormal_of_mem_unitary {u : R} (hu : u ∈ unitary R) : IsStarNormal u :=
145170
coe_isStarNormal ⟨u, hu⟩
146171

0 commit comments

Comments
 (0)