@@ -6,7 +6,6 @@ Authors: Riccardo Brasca
6
6
import Mathlib.Algebra.Group.Pointwise.Set.Finite
7
7
import Mathlib.Algebra.Group.Subgroup.Pointwise
8
8
import Mathlib.GroupTheory.QuotientGroup.Defs
9
- import Mathlib.SetTheory.Cardinal.Finite
10
9
11
10
/-!
12
11
# Finitely generated monoids and groups
25
24
26
25
-/
27
26
27
+ assert_not_exists MonoidWithZero
28
28
29
29
/-! ### Monoids and submonoids -/
30
30
@@ -317,80 +317,8 @@ instance Group.closure_finite_fg (s : Set G) [Finite s] : Group.FG (Subgroup.clo
317
317
haveI := Fintype.ofFinite s
318
318
s.coe_toFinset ▸ Group.closure_finset_fg s.toFinset
319
319
320
- variable (G)
321
-
322
- /-- The minimum number of generators of a group. -/
323
- @[to_additive "The minimum number of generators of an additive group"]
324
- noncomputable def Group.rank [h : Group.FG G] :=
325
- @Nat.find _ (Classical.decPred _) (Group.fg_iff'.mp h)
326
-
327
- @[to_additive]
328
- theorem Group.rank_spec [h : Group.FG G] :
329
- ∃ S : Finset G, S.card = Group.rank G ∧ Subgroup.closure (S : Set G) = ⊤ :=
330
- @Nat.find_spec _ (Classical.decPred _) (Group.fg_iff'.mp h)
331
-
332
- @[to_additive]
333
- theorem Group.rank_le [h : Group.FG G] {S : Finset G} (hS : Subgroup.closure (S : Set G) = ⊤) :
334
- Group.rank G ≤ S.card :=
335
- @Nat.find_le _ _ (Classical.decPred _) (Group.fg_iff'.mp h) ⟨S, rfl, hS⟩
336
-
337
- variable {G} {G' : Type *} [Group G']
338
-
339
- @[to_additive]
340
- theorem Group.rank_le_of_surjective [Group.FG G] [Group.FG G'] (f : G →* G')
341
- (hf : Function.Surjective f) : Group.rank G' ≤ Group.rank G := by
342
- classical
343
- obtain ⟨S, hS1, hS2⟩ := Group.rank_spec G
344
- trans (S.image f).card
345
- · apply Group.rank_le
346
- rw [Finset.coe_image, ← MonoidHom.map_closure, hS2, Subgroup.map_top_of_surjective f hf]
347
- · exact Finset.card_image_le.trans_eq hS1
348
-
349
- @[to_additive]
350
- theorem Group.rank_range_le [Group.FG G] {f : G →* G'} : Group.rank f.range ≤ Group.rank G :=
351
- Group.rank_le_of_surjective f.rangeRestrict f.rangeRestrict_surjective
352
-
353
- @[to_additive]
354
- theorem Group.rank_congr [Group.FG G] [Group.FG G'] (f : G ≃* G') : Group.rank G = Group.rank G' :=
355
- le_antisymm (Group.rank_le_of_surjective f.symm f.symm.surjective)
356
- (Group.rank_le_of_surjective f f.surjective)
357
-
358
320
end Group
359
321
360
- namespace Subgroup
361
-
362
- @[to_additive]
363
- theorem rank_congr {H K : Subgroup G} [Group.FG H] [Group.FG K] (h : H = K) :
364
- Group.rank H = Group.rank K := by subst h; rfl
365
-
366
- @[to_additive]
367
- theorem rank_closure_finset_le_card (s : Finset G) : Group.rank (closure (s : Set G)) ≤ s.card := by
368
- classical
369
- let t : Finset (closure (s : Set G)) := s.preimage Subtype.val Subtype.coe_injective.injOn
370
- have ht : closure (t : Set (closure (s : Set G))) = ⊤ := by
371
- rw [Finset.coe_preimage]
372
- exact closure_preimage_eq_top (s : Set G)
373
- apply (Group.rank_le (closure (s : Set G)) ht).trans
374
- suffices H : Set.InjOn Subtype.val (t : Set (closure (s : Set G))) by
375
- rw [← Finset.card_image_of_injOn H, Finset.image_preimage]
376
- apply Finset.card_filter_le
377
- apply Subtype.coe_injective.injOn
378
-
379
- @[to_additive]
380
- theorem rank_closure_finite_le_nat_card (s : Set G) [Finite s] :
381
- Group.rank (closure s) ≤ Nat.card s := by
382
- haveI := Fintype.ofFinite s
383
- rw [Nat.card_eq_fintype_card, ← s.toFinset_card, ← rank_congr (congr_arg _ s.coe_toFinset)]
384
- exact rank_closure_finset_le_card s.toFinset
385
-
386
- theorem nat_card_centralizer_nat_card_stabilizer (g : G) :
387
- Nat.card (Subgroup.centralizer {g}) =
388
- Nat.card (MulAction.stabilizer (ConjAct G) g) := by
389
- rw [Subgroup.centralizer_eq_comap_stabilizer]
390
- rfl
391
-
392
- end Subgroup
393
-
394
322
section QuotientGroup
395
323
396
324
@[to_additive]
0 commit comments