Skip to content

Commit f1e1278

Browse files
committed
refactor(GroupTheory/GroupAction/Quotient): Move conjugacy class formula earlier (#6290)
This PR moves a formula for the number of conjugacy classes earlier. The proof uses Burnside's theorem, so it cannot be moved any earlier than `GroupTheory/GroupAction/Quotient`.
1 parent 9f2c078 commit f1e1278

File tree

3 files changed

+27
-19
lines changed

3 files changed

+27
-19
lines changed

Mathlib/Data/Fintype/Card.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,10 @@ instance Prod.infinite_of_left [Infinite α] [Nonempty β] : Infinite (α × β)
10611061
Infinite.of_surjective Prod.fst Prod.fst_surjective
10621062
#align prod.infinite_of_left Prod.infinite_of_left
10631063

1064+
instance instInfiniteProdSubtypeCommute [Mul α] [Infinite α] :
1065+
Infinite { p : α × α // _root_.Commute p.1 p.2 } :=
1066+
Infinite.of_injective (fun a => ⟨⟨a, a⟩, rfl⟩) (by intro; simp)
1067+
10641068
namespace Infinite
10651069

10661070
private noncomputable def natEmbeddingAux (α : Type _) [Infinite α] : ℕ → α

Mathlib/GroupTheory/CommutingProbability.lean

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,6 @@ theorem commProb_function [Fintype α] [Mul β] :
6060
commProb (α → β) = (commProb β) ^ Fintype.card α := by
6161
rw [commProb_pi, Finset.prod_const, Finset.card_univ]
6262

63-
instance instInfiniteProdSubtypeCommute [Infinite M] : Infinite { p : M × M // Commute p.1 p.2 } :=
64-
Infinite.of_injective (fun m => ⟨⟨m, m⟩, rfl⟩) (by intro; simp)
65-
6663
@[simp]
6764
theorem commProb_eq_zero_of_infinite [Infinite M] : commProb M = 0 :=
6865
div_eq_zero_iff.2 (Or.inl (Nat.cast_eq_zero.2 Nat.card_eq_zero_of_infinite))
@@ -95,22 +92,6 @@ theorem commProb_eq_one_iff [h : Nonempty M] :
9592

9693
variable (G : Type _) [Group G]
9794

98-
theorem card_comm_eq_card_conjClasses_mul_card :
99-
Nat.card { p : G × G // Commute p.1 p.2 } = Nat.card (ConjClasses G) * Nat.card G := by
100-
rcases fintypeOrInfinite G; swap
101-
· rw [Nat.card_eq_zero_of_infinite, @Nat.card_eq_zero_of_infinite G, mul_zero]
102-
simp only [Nat.card_eq_fintype_card]
103-
-- Porting note: Changed `calc` proof into a `rw` proof.
104-
rw [card_congr (Equiv.subtypeProdEquivSigmaSubtype fun g h : G ↦ Commute g h), card_sigma,
105-
sum_equiv ConjAct.toConjAct.toEquiv (fun a ↦ card { b // Commute a b })
106-
(fun g ↦ card (MulAction.fixedBy (ConjAct G) G g))
107-
fun g ↦ card_congr' <| congr_arg _ <| funext fun h ↦ mul_inv_eq_iff_eq_mul.symm.to_eq,
108-
MulAction.sum_card_fixedBy_eq_card_orbits_mul_card_group, ConjAct.card,
109-
(Setoid.ext fun g h ↦ (Setoid.comm' _).trans isConj_iff.symm :
110-
MulAction.orbitRel (ConjAct G) G = IsConj.setoid G),
111-
@card_congr' (Quotient (IsConj.setoid G)) (ConjClasses G) _ _ rfl]
112-
#align card_comm_eq_card_conj_classes_mul_card card_comm_eq_card_conjClasses_mul_card
113-
11495
theorem commProb_def' : commProb G = Nat.card (ConjClasses G) / Nat.card G := by
11596
rw [commProb, card_comm_eq_card_conjClasses_mul_card, Nat.cast_mul, sq]
11697
by_cases h : (Nat.card G : ℚ) = 0

Mathlib/GroupTheory/GroupAction/Quotient.lean

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2018 Chris Hughes. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Chris Hughes, Thomas Browning
55
-/
6+
import Mathlib.Algebra.Group.ConjFinite
67
import Mathlib.Algebra.Hom.GroupAction
78
import Mathlib.Data.Fintype.BigOperators
89
import Mathlib.Dynamics.PeriodicPts
@@ -401,3 +402,25 @@ theorem quotientCenterEmbedding_apply {S : Set G} (hS : closure S = ⊤) (g : G)
401402
#align subgroup.quotient_center_embedding_apply Subgroup.quotientCenterEmbedding_apply
402403

403404
end Subgroup
405+
406+
section conjClasses
407+
408+
open Fintype
409+
410+
theorem card_comm_eq_card_conjClasses_mul_card (G : Type _) [Group G] :
411+
Nat.card { p : G × G // _root_.Commute p.1 p.2 } = Nat.card (ConjClasses G) * Nat.card G := by
412+
classical
413+
rcases fintypeOrInfinite G; swap
414+
· rw [mul_comm, Nat.card_eq_zero_of_infinite, Nat.card_eq_zero_of_infinite, zero_mul]
415+
simp only [Nat.card_eq_fintype_card]
416+
-- Porting note: Changed `calc` proof into a `rw` proof.
417+
rw [card_congr (Equiv.subtypeProdEquivSigmaSubtype _root_.Commute), card_sigma,
418+
sum_equiv ConjAct.toConjAct.toEquiv (fun a ↦ card { b // _root_.Commute a b })
419+
(fun g ↦ card (MulAction.fixedBy (ConjAct G) G g))
420+
fun g ↦ card_congr' <| congr_arg _ <| funext fun h ↦ mul_inv_eq_iff_eq_mul.symm.to_eq,
421+
MulAction.sum_card_fixedBy_eq_card_orbits_mul_card_group]
422+
congr 1; apply card_congr'; congr; ext;
423+
exact (Setoid.comm' _).trans isConj_iff.symm
424+
#align card_comm_eq_card_conj_classes_mul_card card_comm_eq_card_conjClasses_mul_card
425+
426+
end conjClasses

0 commit comments

Comments
 (0)