Representations can be constructed on a variety of groups.
The trivial representation maps all group elements to the identity matrix.
It can be constructed for any compact group using the trivialRep method.
One picks the field ('R'
or 'C'
) and the dimension.
S3 = replab.S(3);
rep = S3.trivialRep('R', 3)
rep =
Orthogonal trivial reducible representation
dimension: 3
field: 'R'
group: Symmetric group acting on 3 elements
isExactValue: true
isUnitary: true
Not very interesting in itself, the trivial representation is useful as part of larger constructions.
For finite groups, we define representations from images of the generators.
For example, the sign representation of a permutation is one-dimensional, and the images are \(1\) for even permutations, \(-1\) for odd permutations.
The sign of a transposition is always odd, so, by picking the generators [2 1 3]
and [1 3 2]
, we construct the sign representation of \(S_3\) pretty easily.
S3 = replab.S(3);
rep = S3.repByImages('R', 1, 'preimages', {[2 1 3], [1 3 2]}, 'images', {[-1], [-1]})
rep.image([2 3 1])
rep =
Orthogonal representation
dimension: 1
field: 'R'
group: Symmetric group acting on 3 elements
isUnitary: true
preimages{1}: [2, 1, 3]
images{1}: -1
preimages{2}: [1, 3, 2]
images{2}: -1
ans = 1
While RepLAB has experimental support for inexact representations, it is best to provide exact images. If the images have integer entries, it is sufficient to provide standard MATLAB/Octave floating-point matrices. Beyond that, RepLAB supports images in the cyclotomic field, and those need to be encoded in a particular way (we do not support the Symbolic Toolbox of either MATLAB or Octave).
The simplest is to provide images as cyclotomic matrices constructed from a string, taking care to separate the columns with commas.
S3 = replab.S(3);
img_231 = replab.cyclotomic('[-1/2, 3/4; -1, -1/2]');
img_213 = replab.cyclotomic('[1, 0; 0, -1]');
rep = S3.repByImages('R', 2, 'preimages', {[2 3 1], [2 1 3]}, 'images', {img_231, img_213})
rep.image([2 3 1])
rep =
Real representation
dimension: 2
field: 'R'
group: Symmetric group acting on 3 elements
inverseImages: {[-1/2, -3/4; 1, -1/2], [1, 0; 0, -1]}
isUnitary: false
preimages{1}: [2, 3, 1]
images{1}: [-1/2, 3/4; -1, -1/2]
preimages{2}: [2, 1, 3]
images{2}: [1, 0; 0, -1]
ans =
-0.5000 0.7500
-1.0000 -0.5000
To check whether the representation is defined correctly, one can simply run a few randomized checks.
rep.check
Checking commutes with commutant algebra...
Checking composition...
Checking identity...
Checking matrixColAction...
Checking matrixRowAction...
Checking respects division algebra...
Checking unitary...
Checking withTorusImage->torusImage...
Permutation groups have a natural representation that permutes Euclidean coordinates. While there are two choices on how to encode a permutation as a permutation matrix, there is only one choice that obeys \(\rho_{g \cdot h} = \rho_g \cdot \rho_h\), which is the one that RepLAB provides.
S3 = replab.S(3);
rep = S3.naturalRep;
rep.image([2 3 1])
ans =
0 0 1
1 0 0
0 1 0
Classical compact matrix groups have a defining representation, which simply returns the matrix element.
U2 = replab.U(2);
rep = U2.definingRep;
g = U2.sample
img = rep.image(g)
g =
0.6632 + 0.7012i 0.1530 + 0.2122i
0.2144 + 0.1499i -0.7109 - 0.6528i
img =
0.6632 + 0.7012i 0.1530 + 0.2122i
0.2144 + 0.1499i -0.7109 - 0.6528i
RepLAB provides three constructions of the irreducible representations of the symmetric group: Specht modules, seminormal and orthogonal representations. Those irreducible representations are indexed by Young diagrams, which are simply written as integer row vectors.
The constructions below are similar to the ones proposed by Sage, though we wrote an independent implementation.
S3 = replab.S(3);
youngDiagram = [2 1];
repSpecht = S3.irrep(youngDiagram, 'specht');
repSeminormal = S3.irrep(youngDiagram, 'seminormal');
repOrthogonal = S3.irrep(youngDiagram, 'orthogonal');
g = [2 3 1];
imgSpecht = repSpecht.image(g, 'exact')
imgSeminormal = repSeminormal.image(g, 'exact')
imgOrthogonal = repOrthogonal.image(g, 'exact')
ans =
-1 -1
1 0
ans =
-1/2 3/4
-1 -1/2
ans =
-1/2 sqrt(3)/2
-sqrt(3)/2 -1/2