@@ -7,6 +7,7 @@ import Mathlib.Algebra.Group.Submonoid.Operations
77import Mathlib.Algebra.Star.SelfAdjoint
88import Mathlib.Algebra.Algebra.Spectrum.Basic
99import Mathlib.Tactic.ContinuousFunctionalCalculus
10+ import Mathlib.Algebra.Star.MonoidHom
1011import Mathlib.Algebra.Star.StarProjection
1112
1213/-!
@@ -174,22 +175,65 @@ end Monoid
174175
175176section 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
194238end Map
195239
0 commit comments