<#Include SYSTEM "title.xml">
Introduction

This manual describes the Repsn package for computing matrix representations in characteristic zero of finite groups. Most of the functions in Repsn have been written according to the algorithm described in the author's Ph.D thesis and (see ).

For constructing representations of simple groups and their covers we use the algorithm described in . To use this algorithm for constructing a representation of a group G affording an irreducible character \chi of G, we need to have a subgroup H of G such that the restriction of \chi to H has a linear constituent with multiplicity one. In this case we say H is a character subgroup relative to \chi (or a \chi-subgroup). A \chi-subgroup for each irreducible character \chi of degree less than 100 of simple groups and their covers are listed in and .

All Repsn functions are written entirely in the &GAP; language. It is proved in and that the algorithm is correct for any group with a character of degree less than 100. Indeed, if the group is solvable, there is no restriction on the character degree. In practice the program is quite fast when the degree is small, but can be very slow when it is necessary to call one of the subprograms which extend irreducible representations. In the latter case the number of element wise operations required to extend a representation of degree d is proportional to d^6.

Repsn is implemented in the &GAP; language, and runs on any system supporting &GAP;4. The Repsn package is loaded into the current &GAP; session with the command gap> LoadPackage( "repsn" ); (see section Loading a GAP Package in the &GAP; Reference Manual).

Please report any bugs or other issues you might encounter via the Repsn issue tracker at https://github.com/gap-packages/repsn/issues.
Irreducible Representations Let G be a finite group and \chi be an ordinary irreducible character of G. In this chapter we introduce some functions to construct a complex representation R of G affording \chi. We proceed recursively, reducing the problem to smaller subgroups of G or characters of smaller degree until we obtain a problem which we can deal with directly. Inputs of most of the functions are a given group G, and an irreducible character \chi. The output is a mapping (representation) which assigns to each generator x of G a matrix R(x). We can use these functions for all groups and all irreducible characters \chi of degree less than 100 although in principle the same methods can be extended to characters of larger degree. The main methods in these functions which are used to construct representations of finite groups are Induction, Extension, Tensor Product and Dixon's method (for constructing representations of simple groups and their covers) , and Projective Representation method .
Constructing Representations This section introduces the main function to compute a representation of a finite group G affording an irreducible character \chi of G. called with an irreducible character chi of a group G, this function returns a mapping (representation) which maps each generator of G to a d*d matrix, where d is the degree of chi. The group generated by these matrices (the image of the map) is a matrix group which is isomorphic to G modulo the kernel of the map. If G is a solvable group then there is no restriction on the degree of chi. In the case that G is not solvable and the character chi has degree bigger than 100 the output maybe is not correct. In this case sometimes the output mapping does not afford the given character or it does not return any mapping.
gap> s := PerfectGroup( 129024, 2 );; gap> G := Image(IsomorphismPermGroup( s ));; gap> chi := Irr( G )[36];; gap> chi[1]; 64 gap> IrreducibleAffordingRepresentation( chi );; #I Warning: EpimorphismSchurCover via Holt's algorithm is under construction gap> time; 92657
If chi and rep are a character and a representation of a group G, respectively, then `IsAffordingRepresentation` returns `true` if the trace of rep(x) equals chi(x) for all elements x in G.
gap> G := GL(2,7);; gap> chi := Irr(G)[ 29 ];; gap> rep := IrreducibleAffordingRepresentation( chi ); CompositionMapping( [(8,15,22,29,36,43)(9,16,23,30,37,44) (10,17,24,31,38,45)(11,18,25,32,39,46)(12,19,26,33,40,47) (13,20,27,34,41,48)(14,21,28,35,42,49), (2,29,12)(3,36,20) (4,43,28)(5,8,30)(6,15,38)(7,22,46)(9,44,14)(10,16,17) (11,37,27)(13,23,39)(18,24,25)(19,45,35)(21,31,47) (26,32,33)(34,40,41)(42,48,49) ] -> [ [ [ 0, 0, 0, -1, 0, 0, 0 ], [ 1, 0, -1, -1, 1, 0, -1 ] [ 2, -1, -2, -2, 1, 2, -1 ], [ 0, 0, -1, 0, 0, 0, 0 ], [ 1, 0, -2, 0, 0, 1, -1 ], [ 1, 0, -2, -1, 1, 1, -1 ], [ -2, 1, 1, 1, -1, -1, 0 ] ], [ [ 1, -1, -1, -1, 0, 2, -1 ], [ 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 0 ], [ 0, 1, -1, 0, 0, 0, -1 ], [ 0, 1, 0, 1, 0, -1, 0 ], [ 0, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, -1, 0, 0 ] ] ], (action isomorphism) ) gap> IsAffordingRepresentation( chi, rep ); true

We can obtain the size of the image of this representation by `Size(Image(rep))` and compute the value for an arbitrary element x in G by `x`&circum;`rep`.
Induction computes a representation of G induced from the representation rep of a subgroup H of G. If rep has degree d then the degree of the output representation is d*|G:H|.
gap> G := SymmetricGroup( 6 );; gap> H := AlternatingGroup( 6 );; gap> chi := Irr( H )[ 2 ];; gap> rep := IrreducibleAffordingRepresentation( chi );; gap> InducedSubgroupRepresentation( G, rep ); [ (1,2,3,4,5,6), (1,2) ] -> [ [ [ 0, 0, 0, 0, 0, 1, 1, -1, -1, -1 ], [ 0, 0, 0, 0, 0, 1, 0, -1, 0, -1 ], [ 0, 0, 0, 0, 0, 1, 0, 0, -1, -1 ], [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 1, -1, 0, -1 ], [ 1, 1, -1, -1, -1, 0, 0, 0, 0, 0 ], [ 1, 0, 0, -1, -1, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 1, 0, -1, 0, -1, 0, 0, 0, 0, 0 ], [ 0, 1, 0, -1, -1, 0, 0, 0, 0, 0 ] ], [ [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 1, 1, -1, -1, -1 ], [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 1, 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, 0, 0, 0 ], [ 1, 1, -1, -1, -1, 0, 0, 0, 0, 0 ] ] ]
Extension In this section we introduce some functions for extending a representation of a subgroup to the whole group. Suppose H is a subgroup of a group G and chi is an irreducible character of G such that the restriction of chi to H, phi say, is irreducible. If rep is an irreducible representation of H affording phi then `ExtendedRepresentation` extends the representation rep of H to a representation of G affording chi. This function call can be quite expensive when the representation rep has a large degree.
gap> G := AlternatingGroup( 6 );; gap> H := Group([ (1,2,3,4,6), (1,4)(5,6) ]);; gap> chi := Irr( G )[ 2 ];; gap> phi := RestrictedClassFunction( chi, H );; gap> IsIrreducibleCharacter( phi ); true gap> rep := IrreducibleAffordingRepresentation( phi );; gap> ext := ExtendedRepresentation( chi, rep ); #I Need to extend a representation of degree 5. This may take a while. [ (1,2,3,4,5), (4,5,6) ] -> [ [ [ 0, 1, 0, -1, -1 ], [ 0, 0, 0, 1, 0 ], [ -1, -1, -1, 0, 0 ], [ 0, 0, 0, 0, -1 ], [ 0, 0, 1, 1, 1 ] ], [ [ 1, 0, 1, 0, 1 ], [ 0, 1, 0, 0, 0 ], [ -1, -1, 0, 1, 0 ], [ 1, 1, 1, 0, 0 ], [ 0, 0, -1, 0, 0 ] ] ] gap> IsAffordingRepresentation( chi, ext ); true
Suppose H is a normal subgroup of a group G and chi is an irreducible character of G such that the restriction of chi to H, phi say, is irreducible. If rep is an irreducible representation of H affording phi then `ExtendedRepresentationNormal` extends the representation rep of H to a representation of G affording chi. This function is more efficient than `ExtendedRepresentation`.
gap> G := GL(2,7);; gap> chi := Irr( G )[ 29 ];; gap> H := SL(2,7);; gap> phi := RestrictedClassFunction( chi, H );; gap> IsIrreducibleCharacter( phi ); true gap> rep := IrreducibleAffordingRepresentation( phi );; gap> ext := ExtendedRepresentationNormal( chi, rep ); #I Need to extend a representation of degree 7. This may take a while. CompositionMapping( [(8,15,22,29,36,43)(9,16,23,30,37,44) (10,17,24,31,38,45)(11,18,25,32,39,46)(12,19,26,33,40,47) (13,20,27,34,41,48)(14,21,28,35,42,49),(2,29,12)(3,36,20) (4,43,28)(5,8,30)(6,15,38)(7,22,46)(9,44,14)(10,16,17) (11,37,27)(13,23,39)(18,24,25)(19,45,35)(21,31,47) (26,32,33)(34,40,41)(42,48,49) ] -> [ [ [ -1, 0, 0, 1, 0, -1, 0 ], [ -1, 0, 0, 0, 0, 0, 0 ], [ -1, 1, 0, 0, -1, 0, 0 ], [ 0, -1, 0, 0, 0, 0, 0 ], [ -1, -1, 1, 0, 1, -1, 0 ], [ 0, 0, 0, -1, 0, 0, 0 ], [ -1, 0, 1, -1, 1, 0, -1 ] ], [ [ 1, -1, 0, 1, 0, -1, 1 ], [ 1, 0, -1, 1, -1, 0, 1 ], [ 1, -1, 0, 1, -1, 0, 1 ], [ 0, 0, -1, 0, 0, 0, 0 ], [ -1, 0, 0, 1, 0, -1, 0 ], [ -1, 0, 0, 0, 0, 0, 0 ], [ -1, 1, 0, 0, -1, 0, 0 ] ] ], (action isomorphism) ) gap> IsAffordingRepresentation( chi, ext ); true
Character Subgroups If \chi is an irreducible character of a group G and H is a subgroup of G such that the restriction of \chi to H has a linear constituent with multiplicity one, then we call H a character subgroup relative to \chi or a \chi-subgroup. returns a representation affording chi by finding a chi-subgroup and using the method described in . If the second argument is a chi-subgroup then it returns a representation affording chi without searching for a chi-subgroup. In this case an error is signalled if no chi-subgroup exists. is `true` if H is a chi-subgroup and `false` otherwise.
gap> G := AlternatingGroup( 8 );; gap> chi := Irr( G )[ 2 ];; gap> H := AlternatingGroup( 3 );; gap> IsCharacterSubgroup( chi, H ); true gap> rep := CharacterSubgroupRepresentation( chi, H ); [ (1,2,3,4,5,6,7), (6,7,8) ] -> [ [ [ 1/3*E(3)+2/3*E(3)^2, 0, 0, -E(3), 0, -1/3*E(3)-2/3*E(3)^2, 1 ], [ 2/3*E(3)+4/3*E(3)^2, 0, 1, 0, 0, 1/3*E(3)-1/3*E(3)^2, 0 ], [ 2/3*E(3)+4/3*E(3)^2, 0, 0, 1, 0, 1/3*E(3)-1/3*E(3)^2, 0 ], [ E(3)^2, 0, 0, 0, 0, 0, 0 ], [ 2/3*E(3)+4/3*E(3)^2, 0, 0, 0, 1, 1/3*E(3)-1/3*E(3)^2, 0 ], [ -2/3*E(3)-1/3*E(3)^2, 0, 0, -1, 0, 2/3*E(3)+1/3*E(3)^2, E(3)^2 ], [ 0, 1, 0, 0, 0, 0, 0 ] ], [ [ 1, 0, 0, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0 ], [ 0, 0, 0, 0, 1, 0, 0 ], [ 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, -E(3), E(3), 0, 1 ] ] ]
returns a list of all p-subgroups of G which are chi-subgroups. The subgroups are chosen up to conjugacy in G. returns a list containing well described subgroups of G which are chi-subgroups. This list may contain Sylow subgroups and their derived subgroups, normalizers and centralzers in G. returns a list of all chi-subgroups of G among the lattice of subgroups. This function call can be quite expensive for larger groups. The call is expensive in particular if the lattice of subgroups of the given group is not yet known.
Equivalent Representation computes an equivalent representation to an irreducible representation rep by transforming rep to a new basis by spinning up one vector (i.e. getting the other basis vectors as images under the first one under words in the generators). If the input representation, rep, is reducible then `EquivalentRepresentation` does not return any mapping. In this case see section 3.
gap> G := SymmetricGroup( 7 );; gap> chi := Irr( G )[ 2 ];; gap> rep := CharacterSubgroupRepresentation( chi );; gap> equ := EquivalentRepresentation( rep ); [ (1,2,3,4,5,6,7), (1,2) ] -> [ [ [ 0, 0, 0, E(5)+E(5)^2+E(5)^3+2*E(5)^4, -1, -E(5)-E(5)^2-E(5)^3-2*E(5)^4 ], [ E(5)^3-E(5)^4, E(5)^2+E(5)^3+E(5)^4, E(5)+E(5)^3-E(5)^4, -E(5)+E(5)^2 -3*E(5)^3-E(5)^4, -E(5)-E(5)^3+E(5)^4, 2*E(5)-2*E(5)^2+2*E(5)^3 ] , [ 0, 0, 0, 1, 0, 0 ], [ 0, 4/5*E(5)+3/5*E(5)^2+2/5*E(5)^3+1/5*E(5)^4, E(5), 1, -E(5), 6/5*E(5)+2/5*E(5)^2+3/5*E(5)^3+4/5*E(5)^4 ], [ 0, 1, 0, 0, 0, 0 ], [ 0, 0, E(5), 1, -E(5), 2*E(5)+E(5)^2+E(5)^3+E(5)^4 ] ], [ [ -1, 0, E(5)+E(5)^2+E(5)^3+2*E(5)^4, -E(5)-E(5)^2-3*E(5)^4, -E(5)-E(5)^2-E(5)^3-2*E(5)^4, E(5)+E(5)^2+3*E(5)^4 ], [ 0, -1, 0, 0, 0, 0 ], [ 0, 0, 0, E(5)+E(5)^2+E(5)^3+2*E(5)^4, -1, -E(5)-E(5)^2-E(5)^3-2*E(5)^4 ], [ 0, 0, -1, -E(5)^4, 1, E(5)+E(5)^2+E(5)^3+2*E(5)^4 ], [ 0, 0, -E(5)^4, -E(5)^3+E(5)^4, E(5)+E(5)^2+E(5)^3+2*E(5)^4, E(5)^3-E(5)^4 ], [ 0, 0, 0, 0, 0, -1 ] ] ] gap> IsAffordingRepresentation( chi, equ ); true
Reducible Representations In this chapter we introduce some functions which deal with a complex reducible representation R of a finite group G.
Constituents of Representations called with a representation rep of a group G. This function returns a list of irreducible representations of G which are constituents of rep, and their corresponding multiplicities. For example, if rep is a representation of G affording a character X such that X = mY + nZ, where Y and Z are irreducible characters of G, and m and n are the corresponding multiplicities, then `ConstituentsOfRepresentation` returns [[m, S], [n, T]] where S and T are irreducible representations of G affording Y and Z, respectively. This function call can be quite expensive when G is a large group. If rep is a representation of a group G then `IsReducibleRepresentation` returns `true` if rep is a reducible representation of G.
Block Representations If rep is a reducible representation of a group G, this function returns a block diagonal representation of G equivalent to rep. If list = [[m1, R1], [m2, R2], ... , [mt, Rt]] is a list of irreducible representations R1, R2, ... , Rt of G with multiplicities m1, m2, ... , mt, then `EquivalentBlockRepresentation` returns a block diagonal representation of G containing the blocks R1, R2, ... , Rt.
gap> G := AlternatingGroup( 5 );; gap> H := SylowSubgroup( G, 2 );; gap> chi := TrivialCharacter( H );; gap> Hrep := IrreducibleAffordingRepresentation( chi );; gap> rep := InducedSubgroupRepresentation( G, Hrep );; gap> IsReducibleRepresentation( rep ); true gap> con := ConstituentsOfRepresentation( rep ); [ [ 1, [ (1,2,3,4,5), (3,4,5) ] -> [ [ [ 1 ] ], [ [ 1 ] ] ] ], [ 1, [ (1,2,3,4,5), (3,4,5) ] -> [ [ [ E(3), -1/3*E(3)-2/3*E(3)^2, 0, 1/3*E(3)-1/3*E(3)^2 ], [ 1, -4/3*E(3)+1/3*E(3)^2, E(3), -2/3*E(3)-1/3*E(3)^2 ], [ 1, -E(3), E(3), 0 ], [ 1, -1/3*E(3)+1/3*E(3)^2, 1, 1/3*E(3)+2/3*E(3)^2 ] ], [ [ 1, -2/3*E(3)-1/3*E(3)^2, 0, 2/3*E(3)+1/3*E(3)^2 ], [ 0, -E(3), E(3), 1 ], [ 0, -4/3*E(3)-2/3*E(3)^2, E(3), -2/3*E(3)-1/3*E(3)^2 ], [ 0, 0, 1, 0 ] ] ] ], [ 2, [ (1,2,3,4,5), (3,4,5) ] -> [ [ [ -1, 1, 1, 1, -1 ], [ 0, 0, 0, 0, 1 ], [ -1, 0, 0, 1, -1 ], [ 0, 0, 1, 0, 0 ], [ 0, -1, 0, -1, 1 ] ], [ [ 0, 0, 0, 0, 1 ], [ 0, -1, -1, -1, 0 ], [ 0, 1, 0, 0, 0 ], [ 0, 0, 0, 1, 0 ], [ -1, 0, 0, 1, -1 ] ] ] ] ] gap> EquivalentBlockRepresentation( con ); [ (1,2,3,4,5), (3,4,5) ] -> [ [ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, E(3), -1/3*E(3)-2/3*E(3)^2, 0, 1/3*E(3)-1/3*E(3)^2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 1, -4/3*E(3)+1/3*E(3)^2, E(3), -2/3*E(3)-1/3*E(3)^2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 1, -E(3), E(3), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 1, -1/3*E(3)+1/3*E(3)^2, 1, 1/3*E(3)+2/3*E(3)^2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, -1, 1, 1, 1, -1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, -1, 0, 0, 1, -1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, -1, 0, -1, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1, 1, 1, -1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, -1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 1 ] ], [ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 1, -2/3*E(3)-1/3*E(3)^2, 0, 2/3*E(3)+1/3*E(3)^2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, -E(3), E(3), 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, -4/3*E(3)-2/3*E(3)^2, E(3), -2/3*E(3)-1/3*E(3)^2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, -1, 0, 0, 1, -1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, -1 ] ] ]