Documentation

Mathlib.GroupTheory.Perm.Centralizer

Centralizer of a permutation and cardinality of conjugacy classes in the symmetric groups #

Let α : Type with Fintype α (and DecidableEq α). The main goal of this file is to compute the cardinality of conjugacy classes in Equiv.Perm α. Every g : Equiv.Perm α has a g.cycleType : Multiset. By Equiv.Perm.isConj_iff_cycleType_eq, two permutations are conjugate in Equiv.Perm α iff their cycle types are equal. To compute the cardinality of the conjugacy classes, we could use a purely combinatorial approach and compute the number of permutations with given cycle type but we resorted to a more algebraic approach based on the study of the centralizer of a permutation g.

Given g : Equiv.Perm α, the conjugacy class of g is the orbit of g under the action ConjAct (Equiv.Perm α), and we use the orbit-stabilizer theorem (MulAction.card_orbit_mul_card_stabilizer_eq_card_group) to reduce the computation to the computation of the centralizer of g, the subgroup of Equiv.Perm α consisting of all permutations which commute with g. It is accessed here as MulAction.stabilizer (ConjAct (Equiv.Perm α)) g and Subgroup.centralizer_eq_comap_stabilizer.

We compute this subgroup as follows.

This is shown by constructing a right inverse Equiv.Perm.Basis.toCentralizer, as established by Equiv.Perm.Basis.toPermHom_apply_toCentralizer.

This allows to give a description of the kernel of Equiv.Perm.OnCycleFactors.toPermHom g as the product of a symmetric group and of a product of cyclic groups. This analysis starts with the morphism Equiv.Perm.OnCycleFactors.kerParam, its injectivity Equiv.Perm.OnCycleFactors.kerParam_injective, its range Equiv.Perm.OnCycleFactors.kerParam_range_eq, and its cardinality Equiv.Perm.OnCycleFactors.kerParam_range_card.

The action by conjugation of Subgroup.centralizer {g} on the cycles of a given permutation

Equations
    Instances For

      The canonical morphism from Subgroup.centralizer {g} to the group of permutations of g.cycleFactorsFinset

      Equations
        Instances For
          theorem Equiv.Perm.OnCycleFactors.centralizer_smul_def {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) (k : (Subgroup.centralizer {g})) (c : { x : Perm α // x g.cycleFactorsFinset }) :
          k c = k * c * k⁻¹,
          @[simp]
          theorem Equiv.Perm.OnCycleFactors.val_centralizer_smul {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) (k : (Subgroup.centralizer {g})) (c : { x : Perm α // x g.cycleFactorsFinset }) :
          ↑(k c) = k * c * k⁻¹
          theorem Equiv.Perm.OnCycleFactors.toPermHom_apply {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) (k : (Subgroup.centralizer {g})) (c : { x : Perm α // x g.cycleFactorsFinset }) :
          ((toPermHom g) k) c = k c
          theorem Equiv.Perm.OnCycleFactors.coe_toPermHom {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) (k : (Subgroup.centralizer {g})) (c : { x : Perm α // x g.cycleFactorsFinset }) :
          (((toPermHom g) k) c) = k * c * (↑k)⁻¹

          k : Subgroup.centralizer {g} belongs to the kernel of toPermHom g iff it commutes with each cycle of g

          structure Equiv.Perm.Basis {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) :
          Type u_1

          A Basis of a permutation is a choice of an element in each of its cycles

          Instances For
            theorem Equiv.Perm.Basis.nonempty {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) :
            theorem Equiv.Perm.Basis.mem_support_self {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (c : { x : Perm α // x g.cycleFactorsFinset }) :
            a c (↑c).support
            theorem Equiv.Perm.Basis.injective {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) :
            theorem Equiv.Perm.Basis.cycleOf_eq {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (c : { x : Perm α // x g.cycleFactorsFinset }) :
            g.cycleOf (a c) = c
            theorem Equiv.Perm.Basis.sameCycle {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) {x : α} (hx : g.cycleOf x g.cycleFactorsFinset) :
            g.SameCycle (a g.cycleOf x, hx) x
            def Equiv.Perm.Basis.ofPermHomFun {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) (x : α) :
            α

            The function that will provide a right inverse toCentralizer to toPermHom

            Equations
              Instances For
                theorem Equiv.Perm.Basis.mem_fixedPoints_or_exists_zpow_eq {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (x : α) :
                x Function.fixedPoints g ∃ (c : { x : Perm α // x g.cycleFactorsFinset }) (_ : x (↑c).support) (m : ), (g ^ m) (a c) = x
                theorem Equiv.Perm.Basis.ofPermHomFun_apply_of_cycleOf_mem {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) {x : α} {c : { x : Perm α // x g.cycleFactorsFinset }} (hx : x (↑c).support) {m : } (hm : (g ^ m) (a c) = x) :
                a.ofPermHomFun τ x = (g ^ m) (a (τ c))
                theorem Equiv.Perm.Basis.ofPermHomFun_apply_mem_support_cycle_iff {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) {x : α} {c : { x : Perm α // x g.cycleFactorsFinset }} :
                a.ofPermHomFun τ x (↑(τ c)).support x (↑c).support
                theorem Equiv.Perm.Basis.ofPermHomFun_commute_zpow_apply {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) (x : α) (j : ) :
                a.ofPermHomFun τ ((g ^ j) x) = (g ^ j) (a.ofPermHomFun τ x)
                theorem Equiv.Perm.Basis.ofPermHomFun_mul {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (σ τ : (OnCycleFactors.range_toPermHom' g)) (x : α) :
                a.ofPermHomFun (σ * τ) x = a.ofPermHomFun σ (a.ofPermHomFun τ x)
                theorem Equiv.Perm.Basis.ofPermHomFun_one {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (x : α) :
                a.ofPermHomFun 1 x = x
                noncomputable def Equiv.Perm.Basis.ofPermHom {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) :

                Given a : g.Basis and a permutation of g.cycleFactorsFinset that preserve the lengths of the cycles, a permutation of α that moves the Basis and commutes with g

                Equations
                  Instances For
                    theorem Equiv.Perm.Basis.ofPermHom_apply {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) (x : α) :
                    (a.ofPermHom τ) x = a.ofPermHomFun τ x
                    theorem Equiv.Perm.Basis.ofPermHom_support {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) :
                    (a.ofPermHom τ).support = (↑τ).support.biUnion fun (c : { x : Perm α // x g.cycleFactorsFinset }) => (↑c).support
                    theorem Equiv.Perm.Basis.card_ofPermHom_support {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) :
                    (a.ofPermHom τ).support.card = c(↑τ).support, (↑c).support.card
                    noncomputable def Equiv.Perm.Basis.toCentralizer {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) :

                    Given a : Equiv.Perm.Basis g, we define a right inverse of Equiv.Perm.OnCycleFactors.toPermHom, on range_toPermHom' g

                    Equations
                      Instances For
                        theorem Equiv.Perm.Basis.toCentralizer_apply {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (τ : (OnCycleFactors.range_toPermHom' g)) (x : α) :
                        (a.toCentralizer τ) x = a.ofPermHomFun τ x
                        theorem Equiv.Perm.Basis.toCentralizer_equivariant {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} (a : g.Basis) (c : { x : Perm α // x g.cycleFactorsFinset }) (τ : (OnCycleFactors.range_toPermHom' g)) :
                        a.toCentralizer τ c = τ c
                        theorem Equiv.Perm.OnCycleFactors.mem_range_toPermHom_iff {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} {τ : Perm { x : Perm α // x g.cycleFactorsFinset }} :
                        τ (toPermHom g).range ∀ (c : { x : Perm α // x g.cycleFactorsFinset }), (↑(τ c)).support.card = (↑c).support.card
                        theorem Equiv.Perm.OnCycleFactors.mem_range_toPermHom_iff' {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} {τ : Perm { x : Perm α // x g.cycleFactorsFinset }} :
                        τ (toPermHom g).range (fun (c : { x : Perm α // x g.cycleFactorsFinset }) => (↑c).support.card) τ = fun (c : { x : Perm α // x g.cycleFactorsFinset }) => (↑c).support.card

                        Unapplied variant of Equiv.Perm.mem_range_toPermHom_iff

                        def Equiv.Perm.OnCycleFactors.kerParam {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) :
                        Perm (Function.fixedPoints g) × ((c : { x : Perm α // x g.cycleFactorsFinset }) → (Subgroup.zpowers c)) →* Perm α

                        The parametrization of the kernel of toPermHom

                        Equations
                          Instances For
                            theorem Equiv.Perm.OnCycleFactors.kerParam_apply {α : Type u_1} [DecidableEq α] [Fintype α] {g : Perm α} {u : Perm (Function.fixedPoints g)} {v : (c : { x : Perm α // x g.cycleFactorsFinset }) → (Subgroup.zpowers c)} {x : α} :
                            ((kerParam g) (u, v)) x = if hx : g.cycleOf x g.cycleFactorsFinset then (v g.cycleOf x, hx) x else (ofSubtype u) x
                            theorem Equiv.Perm.OnCycleFactors.sign_kerParam_apply_apply {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) (k : Perm (Function.fixedPoints g)) (v : (c : { x : Perm α // x g.cycleFactorsFinset }) → (Subgroup.zpowers c)) :
                            sign ((kerParam g) (k, v)) = sign k * c : { x : Perm α // x g.cycleFactorsFinset }, sign (v c)
                            theorem Equiv.Perm.OnCycleFactors.cycleType_kerParam_apply_apply {α : Type u_1} [DecidableEq α] [Fintype α] (g : Perm α) (k : Perm (Function.fixedPoints g)) (v : (c : { x : Perm α // x g.cycleFactorsFinset }) → (Subgroup.zpowers c)) :
                            ((kerParam g) (k, v)).cycleType = k.cycleType + c : { x : Perm α // x g.cycleFactorsFinset }, (↑(v c)).cycleType

                            Cardinality of the centralizer in Equiv.Perm α of a permutation given cycleType

                            Cardinality of a conjugacy class in Equiv.Perm α of a given cycleType

                            theorem Equiv.Perm.card_of_cycleType_eq_zero_iff (α : Type u_1) [DecidableEq α] [Fintype α] {m : Multiset } :
                            {g : Perm α | g.cycleType = m}.card = 0 ¬(m.sum Fintype.card α am, 2 a)
                            theorem Equiv.Perm.card_of_cycleType_mul_eq (α : Type u_1) [DecidableEq α] [Fintype α] (m : Multiset ) :
                            {g : Perm α | g.cycleType = m}.card * ((Fintype.card α - m.sum).factorial * m.prod * nm.toFinset, (Multiset.count n m).factorial) = if m.sum Fintype.card α am, 2 a then (Fintype.card α).factorial else 0
                            theorem Equiv.Perm.card_of_cycleType (α : Type u_1) [DecidableEq α] [Fintype α] (m : Multiset ) :
                            {g : Perm α | g.cycleType = m}.card = if m.sum Fintype.card α am, 2 a then (Fintype.card α).factorial / ((Fintype.card α - m.sum).factorial * m.prod * nm.toFinset, (Multiset.count n m).factorial) else 0

                            Cardinality of the Finset of Equiv.Perm α of given cycleType

                            theorem Equiv.Perm.card_of_cycleType_singleton {α : Type u_1} [DecidableEq α] [Fintype α] {n : } (hn' : 2 n) ( : n Fintype.card α) :
                            {g : Perm α | g.cycleType = {n}}.card = (n - 1).factorial * (Fintype.card α).choose n

                            The number of cycles of given length