Skip to content

Commit 8a1271a

Browse files
committed
more instances
1 parent d58107d commit 8a1271a

1 file changed

Lines changed: 21 additions & 4 deletions

File tree

Mathlib/GroupTheory/Finiteness.lean

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
7879
theorem 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

8889
namespace Monoid
8990

90-
variable {M : Type*} [Monoid M]
91+
variable {M N : Type*} [MulOneClass M] [MulOneClass N] (f : M →* N)
9192

9293
@[to_additive]
9394
theorem 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+
109114
end Monoid
110115

111116
namespace 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]
116121
theorem 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 :=
136141
instance [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+
139148
end Submonoid
140149

141150
namespace Group
142151

143-
variable {G : Type*} [Group G]
152+
variable {G G' : Type*} [Group G] [Group G'] (f : G →* G')
144153

145154
@[to_additive]
146155
theorem 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+
156169
end Group
157170

158171
namespace 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]
163176
theorem 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 :=
182195
instance [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+
185202
end Subgroup
186203

187204
end

0 commit comments

Comments
 (0)