The SAGE-GAP interface can be used to compute character tables.
You can construct the table of character values of a
permutation group
as a SAGE matrix, using the
method
character_table
of the PermutationGroup
class, or via the pexpect interface to the GAP command
CharacterTable
.
sage: G = PermutationGroup([[(1,2),(3,4)], [(1,2,3,4)]]) sage: G.order() 8 sage: G.character_table() [ 1 1 1 1 1] [ 1 -1 -1 1 1] [ 1 -1 1 -1 1] [ 1 1 -1 -1 1] [ 2 0 0 0 -2] sage: CT = gap(G).CharacterTable() sage: print gap.eval("Display(%s)"%CT.name()) CT2 2 3 2 2 2 3 1a 2a 2b 4a 2c 2P 1a 1a 1a 2c 1a 3P 1a 2a 2b 4a 2c X.1 1 1 1 1 1 X.2 1 -1 -1 1 1 X.3 1 -1 1 -1 1 X.4 1 1 -1 -1 1 X.5 2 . . . -2
Here is another example:
sage: G = PermutationGroup([[(1,2),(3,4)], [(1,2,3)]]) sage: G.character_table() [ 1 1 1 1] [ 1 1 -zeta3 - 1 zeta3] [ 1 1 zeta3 -zeta3 - 1] [ 3 -1 0 0] sage: gap.eval("G := Group((1,2)(3,4),(1,2,3))") 'Group([ (1,2)(3,4), (1,2,3) ])' sage: gap.eval("T := CharacterTable(G)") 'CharacterTable( Alt( [ 1 .. 4 ] ) )' sage: print gap.eval("Display(T)") CT1 2 2 2 . . 3 1 . 1 1 1a 2a 3a 3b 2P 1a 1a 3b 3a 3P 1a 2a 1a 1a X.1 1 1 1 1 X.2 1 1 A /A X.3 1 1 /A A X.4 3 -1 . . A = E(3)^2 = (-1-ER(-3))/2 = -1-b3
sage: print gap.eval("irr := Irr(G)") [ Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, 1, 1 ] ), Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, E(3)^2, E(3) ] ), Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, E(3), E(3)^2 ] ), Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 3, -1, 0, 0 ] ) ] sage: print gap.eval("Display(irr)") [ [ 1, 1, 1, 1 ], [ 1, 1, E(3)^2, E(3) ], [ 1, 1, E(3), E(3)^2 ], [ 3, -1, 0, 0 ] ] sage: gap.eval("CG := ConjugacyClasses(G)") '[ ()^G, (1,2)(3,4)^G, (1,2,3)^G, (1,2,4)^G ]' sage: gap.eval("gamma := CG[3]") '(1,2,3)^G' sage: gap.eval("g := Representative(gamma)") '(1,2,3)' sage: gap.eval("chi := irr[2]") 'Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, E(3)^2, E(3) ] )' sage: gap.eval("g^chi") 'E(3)^2'
Alternatively, if you turn IPython ``pretty printing'' off, then the table prints nicely.
sage: %Pprint Pretty printing has been turned OFF sage: gap.eval("G := Group((1,2)(3,4),(1,2,3))") Group([ (1,2)(3,4), (1,2,3) ]) sage: gap.eval("T := CharacterTable(G)") CharacterTable( Alt( [ 1 .. 4 ] ) ) sage: gap.eval("Display(T)") CT1 2 2 2 . . 3 1 . 1 1 1a 2a 3a 3b 2P 1a 1a 3b 3a 3P 1a 2a 1a 1a X.1 1 1 1 1 X.2 1 1 A /A X.3 1 1 /A A X.4 3 -1 . . A = E(3)^2 = (-1-ER(-3))/2 = -1-b3 sage: gap.eval("irr := Irr(G)") [ Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, 1, 1 ] ), Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, E(3)^2, E(3) ] ), Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 1, 1, E(3), E(3)^2 ] ), Character( CharacterTable( Alt( [ 1 .. 4 ] ) ), [ 3, -1, 0, 0 ] ) ] sage: gap.eval("Display(irr)") [ [ 1, 1, 1, 1 ], [ 1, 1, E(3)^2, E(3) ], [ 1, 1, E(3), E(3)^2 ], [ 3, -1, 0, 0 ] ] sage: %Pprint Pretty printing has been turned ON
The example below using the GAP interface illusrates the syntax.
sage: gap.eval("G := Group((1,2)(3,4),(1,2,3))") 'Group([ (1,2)(3,4), (1,2,3) ])' sage: gap.eval("irr := IrreducibleRepresentations(G,GF(7))") '[ [ (1,2)(3,4), (1,2,3) ] -> [ [ [ Z(7)^0 ] ], [ [ Z(7)^4 ] ] ], \n [ (1,2)(3,4), (1,2,3) ] -> [ [ [ Z(7)^0 ] ], [ [ Z(7)^0 ] ] ], \n [ (1,2)(3,4), (1,2,3) ] -> [ [ [ Z(7)^0 ] ], [ [ Z(7)^2 ] ] ], \n [ (1,2)(3,4), (1,2,3) ] -> \n [ [ [ 0*Z(7), 0*Z(7), Z(7)^0 ], [ Z(7)^3, Z(7)^3, Z(7)^3 ], \n [ Z(7)^0, 0*Z(7), 0*Z(7) ] ], \n [ [ Z(7)^0, Z(7)^0, 0*Z(7) ], [ 0*Z(7), 0*Z(7), Z(7)^0 ], \n [ 0*Z(7), Z(7)^3, Z(7)^3 ] ] ] ]' sage: gap.eval("brvals := List(irr,chi-> List(ConjugacyClasses(G),c->BrauerCharacterValue(Image(chi, Representative(c)))))") '[ [ 1, 1, E(3)^2, E(3) ], [ 1, 1, 1, 1 ], [ 1, 1, E(3), E(3)^2 ], [ 3, -1, 0, 0 ] ]' sage: gap.eval("Display(brvals)") '[ [ 1, 1, E(3)^2, E(3) ],\n [ 1, 1, 1, 1 ],\n [ 1, 1, E(3), E(3)^2 ],\n [ 3, -1, 0, 0 ] ]' sage: gap.eval("T := CharacterTable(G)") 'CharacterTable( Alt( [ 1 .. 4 ] ) )' sage: gap.eval("Display(T)") 'CT2\n\n 2 2 2 . .\n 3 1 . 1 1\n \n 1a 2a 3a 3b\n 2P 1a 1a 3b 3a\n 3P 1a 2a 1a 1a\n \n X.1 1 1 1 1\n X.2 1 1 A /A\n X.3 1 1 /A A\n X.4 3 -1 . .\n \n A = E(3)^2\n = (-1-ER(-3))/2 = -1-b3' sage:
See About this document... for information on suggesting changes.