@@ -75,6 +75,7 @@ instance [Finite M] : IsMulFG M := by
7575 cases nonempty_fintype M
7676 exact ⟨Finset.univ, by simp⟩
7777
78+ @[to_additive]
7879theorem IsMulFG.of_surjective {F : Type *} [FunLike F M N] [MulHomClass F M N] (f : F)
7980 (hf : Function.Surjective f) [IsMulFG M] : IsMulFG N := by
8081 classical
@@ -87,7 +88,7 @@ end Mul
8788
8889namespace Monoid
8990
90- variable {M : Type *} [Monoid M]
91+ variable {M N : Type *} [MulOneClass M] [MulOneClass N] (f : M →* N)
9192
9293@[to_additive]
9394theorem isMulFG_iff : IsMulFG M ↔ ∃ S : Finset M, Submonoid.closure (S : Set M) = ⊤ := by
@@ -106,11 +107,15 @@ theorem isMulFG_iff_finite :
106107 isMulFG_iff.trans
107108 ⟨fun ⟨S, hS⟩ ↦ ⟨S, hS, S.finite_toSet⟩, fun ⟨S, hS, hf⟩ ↦ ⟨hf.toFinset, by simpa⟩⟩
108109
110+ @[to_additive]
111+ instance [IsMulFG M] : IsMulFG (MonoidHom.mrange f) :=
112+ .of_surjective f.mrangeRestrict (f.mrangeRestrict_surjective)
113+
109114end Monoid
110115
111116namespace Submonoid
112117
113- variable {M : Type *} [Monoid M] {P : Submonoid M}
118+ variable {M N : Type *} [MulOneClass M] [MulOneClass N] {P : Submonoid M} (f : M →* N)
114119
115120@[to_additive]
116121theorem isMulFG_iff : IsMulFG P ↔ ∃ S : Finset M, Submonoid.closure (S : Set M) = P := by
@@ -136,11 +141,15 @@ theorem isMulFG_top_iff : IsMulFG (⊤ : Submonoid M) ↔ IsMulFG M :=
136141instance [IsMulFG M] : IsMulFG (⊤ : Submonoid M) :=
137142 isMulFG_top_iff.mpr ‹_›
138143
144+ @[to_additive]
145+ instance [IsMulFG P] : IsMulFG (P.map f) :=
146+ .of_surjective (f.submonoidMap P) (f.submonoidMap_surjective P)
147+
139148end Submonoid
140149
141150namespace Group
142151
143- variable {G : Type *} [Group G]
152+ variable {G G' : Type *} [Group G] [Group G'] (f : G →* G')
144153
145154@[to_additive]
146155theorem isMulFG_iff : IsMulFG G ↔ ∃ S : Finset G, Subgroup.closure (S : Set G) = ⊤ := by
@@ -153,11 +162,15 @@ theorem isMulFG_iff_finite : IsMulFG G ↔ ∃ S : Set G, Subgroup.closure (S :
153162 isMulFG_iff.trans
154163 ⟨fun ⟨S, hS⟩ ↦ ⟨S, hS, S.finite_toSet⟩, fun ⟨S, hS, hf⟩ ↦ ⟨hf.toFinset, by simpa⟩⟩
155164
165+ @[to_additive]
166+ instance [IsMulFG G] : IsMulFG f.range :=
167+ .of_surjective f.rangeRestrict (f.rangeRestrict_surjective)
168+
156169end Group
157170
158171namespace Subgroup
159172
160- variable {G : Type *} [Group G] {H : Subgroup G}
173+ variable {G G' : Type *} [Group G] [Group G'] {H : Subgroup G} (f : G →* G')
161174
162175@[to_additive]
163176theorem isMulFG_iff : IsMulFG H ↔ ∃ S : Finset G, Subgroup.closure (S : Set G) = H := by
@@ -182,6 +195,10 @@ theorem isMulFG_top_iff : IsMulFG (⊤ : Subgroup G) ↔ IsMulFG G :=
182195instance [IsMulFG G] : IsMulFG (⊤ : Subgroup G) :=
183196 isMulFG_top_iff.mpr ‹_›
184197
198+ @[to_additive]
199+ instance [IsMulFG H] : IsMulFG (H.map f) :=
200+ .of_surjective (f.subgroupMap H) (f.subgroupMap_surjective H)
201+
185202end Subgroup
186203
187204end
0 commit comments