Finite group representation#

Some utility function for representations of finite groups

Most of the functions are just GAP wrappers.

surface_dynamics.misc.group_representation.conjugacy_class_matrix(cl, d)[source]#

Return the matrix associated to a given conjugacy class of a permutation group.

The result is a d times d matrix that is invariant under conjugation by the group action on ZZ^d. It is used to produce the projection matrices on the isotypic subspaces.

EXAMPLES:

sage: from surface_dynamics.misc.group_representation import conjugacy_class_matrix

sage: G = QuaternionGroup()
sage: Ggap = libgap(G)
sage: cls = Ggap.ConjugacyClasses()
sage: m = conjugacy_class_matrix(cls[2], 8)
sage: m
[0 0 1 0 0 0 0 0]
[0 0 0 1 0 0 0 0]
[1 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 1]
[0 0 0 0 1 0 0 0]
[0 0 0 0 0 1 0 0]

sage: for cl in cls:
....:      m = conjugacy_class_matrix(cl, 8)
....:      for g in G:
....:          g = g.matrix()
....:          assert g*m*~g == m

sage: A = AlternatingGroup(5)
sage: Agap = libgap(A)
sage: Ggap = Agap.Action(Agap)
sage: gens = libgap.GeneratorsOfGroup(Ggap).sage()
sage: G = PermutationGroup(gens)
sage: cls = Ggap.ConjugacyClasses()
sage: for cl in cls:
....:      m = conjugacy_class_matrix(cls[2], 60)
....:      for _ in range(20):
....:           g = G.random_element().matrix()
....:           assert g*m*~g == m
surface_dynamics.misc.group_representation.isotypic_projection_matrix(G, d, chi, deg, conj_mats=None, floating_point=False)[source]#

Return an isotypic projection matrix

INPUT:

  • G – a permutation group

  • d – (integer) the domain of the group is {1, 2, ldots, d}

  • chi – (tuple) real or complex character

  • deg – (integer) degree of the character

  • conj_mats – (optional list) matrices of the conjugacy classes

  • floating_point – whether to return matrices with floating point entries instead

    of elements in the cyclotomic field

Recall the formula for the projection as given in Theorem 8 in [Ser67]. If G is a permutation group, then

\[\pi_\chi = \sum_{g \in G} \overline_{\chi(g)} g\]

EXAMPLES:

sage: from surface_dynamics.misc.group_representation import real_characters, isotypic_projection_matrix
sage: G = AlternatingGroup(5)
sage: T,deg = real_characters(G)
sage: isotypic_projection_matrix(G, 5, T[0], deg[0])
[1/5 1/5 1/5 1/5 1/5]
[1/5 1/5 1/5 1/5 1/5]
[1/5 1/5 1/5 1/5 1/5]
[1/5 1/5 1/5 1/5 1/5]
[1/5 1/5 1/5 1/5 1/5]
sage: isotypic_projection_matrix(G, 5, T[1], deg[1])
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
sage: isotypic_projection_matrix(G, 5, T[2], deg[2])
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
sage: isotypic_projection_matrix(G, 5, T[3], deg[3])
[ 4/5 -1/5 -1/5 -1/5 -1/5]
[-1/5  4/5 -1/5 -1/5 -1/5]
[-1/5 -1/5  4/5 -1/5 -1/5]
[-1/5 -1/5 -1/5  4/5 -1/5]
[-1/5 -1/5 -1/5 -1/5  4/5]
sage: isotypic_projection_matrix(G, 5, T[3], deg[3], floating_point=True)
array([[ 0.8, -0.2, -0.2, -0.2, -0.2],
       [-0.2,  0.8, -0.2, -0.2, -0.2],
       [-0.2, -0.2,  0.8, -0.2, -0.2],
       [-0.2, -0.2, -0.2,  0.8, -0.2],
       [-0.2, -0.2, -0.2, -0.2,  0.8]])
sage: isotypic_projection_matrix(G, 5, T[4], deg[4])
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]

sage: sum(isotypic_projection_matrix(G, 5, T[i], deg[i]) for i in range(5)).is_one()
True
surface_dynamics.misc.group_representation.real_characters(G)[source]#

Return a pair (table of characters, character degrees) for the group G.

OUTPUT:

  • table of characters - a list of characters. Each character is represented as the list of its values on conjugacy classes. The order of conjugacy classes is the same as the one returned by GAP.

  • degrees - the list of degrees of the characters

EXAMPLES:

sage: from surface_dynamics.misc.group_representation import real_characters
sage: T, deg = real_characters(AlternatingGroup(5))
sage: T
[(1, 1, 1, 1, 1),
 (3, -1, 0, -E(5) - E(5)^4, -E(5)^2 - E(5)^3),
 (3, -1, 0, -E(5)^2 - E(5)^3, -E(5) - E(5)^4),
 (4, 0, 1, -1, -1),
 (5, 1, -1, 0, 0)]
sage: set(parent(x) for chi in T for x in chi)
{Universal Cyclotomic Field}
sage: deg
[1, 3, 3, 4, 5]

sage: T, deg = real_characters(CyclicPermutationGroup(6))
sage: T
[(1, 1, 1, 1, 1, 1),
 (1, -1, 1, -1, 1, -1),
 (2, -1, -1, 2, -1, -1),
 (2, 1, -1, -2, -1, 1)]
sage: deg
[1, 1, 1, 1]
surface_dynamics.misc.group_representation.real_isotypic_projection_matrices(G, d)[source]#

Return the real projections

EXAMPLES:

sage: from surface_dynamics.misc.group_representation import real_isotypic_projection_matrices

sage: G = AlternatingGroup(5)
sage: mats = real_isotypic_projection_matrices(G, 6)
sage: sum(mats).is_one()
True

sage: G = CyclicPermutationGroup(6)
sage: mats = real_isotypic_projection_matrices(G, 6)
sage: sum(mats).is_one()
True

sage: G = QuaternionGroup()
sage: mats = real_isotypic_projection_matrices(G, 8)
sage: sum(mats).is_one()
True
surface_dynamics.misc.group_representation.regular_conjugacy_class_matrix(cl, G)[source]#

Return the matrix of the conjugacy class cl associated to the regular representation of G.