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 groupd
– (integer) the domain of the group is {1, 2, ldots, d}chi
– (tuple) real or complex characterdeg
– (integer) degree of the characterconj_mats
– (optional list) matrices of the conjugacy classesfloating_point
– whether to return matrices with floating point entries insteadof 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 groupG
.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