Skip to content

Commit bae1fe6

Browse files
committed
refactor: make unitary.map take a StarMonoidHom instead of a morphism class.
1 parent c4cee2d commit bae1fe6

1 file changed

Lines changed: 51 additions & 7 deletions

File tree

Mathlib/Algebra/Star/Unitary.lean

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Mathlib.Algebra.Group.Submonoid.Operations
77
import Mathlib.Algebra.Star.SelfAdjoint
88
import Mathlib.Algebra.Algebra.Spectrum.Basic
99
import Mathlib.Tactic.ContinuousFunctionalCalculus
10+
import Mathlib.Algebra.Star.MonoidHom
1011
import Mathlib.Algebra.Star.StarProjection
1112

1213
/-!
@@ -174,22 +175,65 @@ end Monoid
174175

175176
section Map
176177

177-
variable {F R S : Type*} [Monoid R] [StarMul R] [Monoid S] [StarMul S]
178-
variable [FunLike F R S] [StarHomClass F R S] [MonoidHomClass F R S] (f : F)
178+
variable {R S T : Type*} [Monoid R] [StarMul R] [Monoid S] [StarMul S] [Monoid T] [StarMul T]
179179

180-
lemma map_mem {r : R} (hr : r ∈ unitary R) : f r ∈ unitary S := by
180+
lemma map_mem {F : Type*} [FunLike F R S] [StarHomClass F R S] [MonoidHomClass F R S]
181+
(f : F) {r : R} (hr : r ∈ unitary R) : f r ∈ unitary S := by
181182
rw [unitary.mem_iff] at hr
182183
simpa [map_star, map_mul] using And.intro congr(f $(hr.1)) congr(f $(hr.2))
183184

184-
/-- The group homomorphism between unitary subgroups of star monoids induced by a star
185-
homomorphism -/
185+
/-- The star monoid homomorphism between unitary subgroups induced by a star monoid homomorphism of
186+
the underlying star monoids. -/
186187
@[simps]
187-
def map : unitary R →* unitary S where
188+
def map (f : R →⋆* S) : unitary R →* unitary S where
188189
toFun := Subtype.map f (fun _ ↦ map_mem f)
189190
map_one' := Subtype.ext <| map_one f
190191
map_mul' _ _ := Subtype.ext <| map_mul f _ _
192+
map_star' _ := Subtype.ext <| map_star f _
191193

192-
lemma toUnits_comp_map : toUnits.comp (map f) = (Units.map f).comp toUnits := by ext; rfl
194+
@[simp]
195+
lemma coe_map (f : R →⋆* S) (x : unitary R) : (map f x : S) = f x := rfl
196+
197+
@[simp]
198+
lemma coe_map_star (f : R →⋆* S) (x : unitary R) : (map f (star x) : S) = f (star x) := rfl
199+
200+
@[simp]
201+
lemma map_id : map (.id R) = .id (unitary R) := rfl
202+
203+
lemma map_comp (g : S →⋆* T) (f : R →⋆* S) : map (g.comp f) = (map g).comp (map f) := rfl
204+
205+
@[simp]
206+
lemma map_injective {f : R →⋆* S} (hf : Function.Injective f) :
207+
Function.Injective (map f : unitary R → unitary S) :=
208+
Subtype.map_injective (fun _ ↦ map_mem f) hf
209+
210+
lemma toUnits_comp_map (f : R →⋆* S) :
211+
toUnits.comp (map f).toMonoidHom = (Units.map f.toMonoidHom).comp toUnits := by
212+
ext; rfl
213+
214+
/-- The star monoid isomorphism between unitary subgroups induced by a star monoid isomorphism of
215+
the underlying star monoids. -/
216+
@[simps]
217+
def mapEquiv (f : R ≃⋆* S) : unitary R ≃⋆* unitary S :=
218+
{ map f.toStarMonoidHom with
219+
toFun := map f.toStarMonoidHom
220+
invFun := map f.symm.toStarMonoidHom
221+
left_inv := fun _ ↦ Subtype.ext <| f.left_inv _
222+
right_inv := fun _ ↦ Subtype.ext <| f.right_inv _ }
223+
224+
@[simp]
225+
lemma mapEquiv_refl : mapEquiv (.refl R) = .refl (unitary R) := rfl
226+
227+
@[simp]
228+
lemma mapEquiv_symm (f : R ≃⋆* S) : mapEquiv f.symm = (mapEquiv f).symm := rfl
229+
230+
@[simp]
231+
lemma mapEquiv_trans (f : R ≃⋆* S) (g : S ≃⋆* T) :
232+
mapEquiv (f.trans g) = (mapEquiv f).trans (mapEquiv g) :=
233+
rfl
234+
235+
@[simp]
236+
lemma toMonoidHom_mapEquiv (f : R ≃⋆* S) : (mapEquiv f).toMonoidHom = map f.toStarMonoidHom := rfl
193237

194238
end Map
195239

0 commit comments

Comments
 (0)