The symmetric group
Before trying any of the RepLAB commands, we must initialize the library:
[1]:
addpath([pwd, '/../../../external/replab']);
replab_init('verbose', 0);
replab_init: Initialization done.
Consider
With
[2]:
[1 2 3];
and
[3]:
[1 3 2];
In general there are
In RepLAB, the symmetric group can be constructed with a simple command
[4]:
n = 3;
S3 = replab.S(n);
The elements of the group can be easily listed
[5]:
S3.elements
ans =
{
[1,1] =
1 2 3
[1,2] =
1 3 2
[1,3] =
2 1 3
[1,4] =
2 3 1
[1,5] =
3 1 2
[1,6] =
3 2 1
}
The number of elements is the order of the group
[6]:
S3.order
ans =
6
As we see, permutations are represented by row-vectors with an arrangement of the elements
The group structure defines how elements of the group compose with each other. For instance, permuting the first two elements in
[7]:
element1 = [2 1 3];
element2 = [1 3 2];
S3.compose(element1, element2)
ans =
2 3 1
A group can always be represented by matrices of finite dimension. In a
Several matrix representations are possible for the same group, possibly in various dimension
When seeing the group as a permutation within
[8]:
natRep = S3.naturalRep;
The image of a group element in this representation can be extracted
[9]:
natRep.image([2 1 3])
ans =
0 1 0
1 0 0
0 0 1
We see that the matrices representing the group elements are
For a representation to be valid, the images must follow the structure of the group:
[10]:
image1 = natRep.image(element1);
image2 = natRep.image(element2);
image1*image2
natRep.image(S3.compose(element1, element2))
ans =
0 0 1
1 0 0
0 1 0
ans =
0 0 1
1 0 0
0 1 0
We see that the image of the product of elements is indeed the product of the images of the respective elements, i.e. the algebra of matrices acting on the representation images accurately reflects the group algebra.
It can be checked, moreover, that the natural representation is faithful, i.e. each group element has its own distinct image. This needs not always be the case as in the following two examples.
To construct an arbitrary group representation in RepLAB, it is sufficient to provide the image of the generators of the group. The group
[11]:
generators = S3.generators;
generators{:}
ans =
2 3 1
ans =
2 1 3
Let us construct a representation of this group in dimension
[12]:
d = 1;
associating the each generator its parity (i.e. either
[13]:
parRep = S3.repByImages('R', d, 'preimages', S3.generators, 'images', {1 -1});
We can check that this representation is valid
[14]:
image1 = parRep.image(element1)
image2 = parRep.image(element2)
image1*image2
parRep.image(S3.compose(element1, element2))
image1 = -1
image2 = -1
ans = 1
ans = 1
The parity of each binary permutation [2 1 3]
and [1 3 2]
is
Clearly, this representation carries some information about the group, namely the parity, but some elements have the same image:
[15]:
allElements = S3.elements;
for i = 1:length(allElements)
disp(['Image of [', num2str(allElements{i}), '] : ', num2str(parRep.image(allElements{i}))]);
end
Image of [1 2 3] : 1
Image of [1 3 2] : -1
Image of [2 1 3] : -1
Image of [2 3 1] : 1
Image of [3 1 2] : 1
Image of [3 2 1] : -1
Therefore, this representation is not faithful.
An even simpler representation of the group S(n) is one in which the image of all elements is set to
It can be constructed similarly from the image of the generators:
[16]:
trivRep = S3.repByImages('R', d, 'preimages', S3.generators, 'images', {1 1});
This time, the group law is trivially satisfied since all images are indeed equal to
[17]:
for i = 1:length(allElements)
disp(['Image of [', num2str(allElements{i}), '] : ', num2str(trivRep.image(allElements{i}))]);
end
Image of [1 2 3] : 1
Image of [1 3 2] : 1
Image of [2 1 3] : 1
Image of [2 3 1] : 1
Image of [3 1 2] : 1
Image of [3 2 1] : 1
We have seen that a group can admit several representations. Any two representations of a group in dimension
For instance, we can construct a
[18]:
newRep = blkdiag(natRep, parRep)
newRep =
Orthogonal direct sum representation
dimension: 4
field: 'R'
group: Symmetric group acting on 3 elements
isUnitary: true
factor(1): Orthogonal reducible representation
factor(2): Orthogonal representation
The images are then
[19]:
newRep.image(element1)
newRep.image(element2)
ans =
0 1 0 0
1 0 0 0
0 0 1 0
0 0 0 -1
ans =
1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 -1
As expected, the images have a block diagonal structure. The properties of a direct sum representation are thus captured by the properties of the representation in each block. Such a representation is reducible.
Given a representation, it is not always obvious whether it is the direct sum of more fundamental representations or if the representation is irreducible. For instance, the images of the natural representation introduced above are not obviously block-diagonal. Yet, this representation is also reducible. To see this, one needs to find a basis of the vector space
This can be achieved in RepLAB by decomposing the representation
[20]:
natDec = natRep.decomposition.nice;
natDec.nComponents
warning: -largeArrayDims and -compatibleArrayDims are accepted for compatibility, but ignored
ans = 2
This shows that the defininig representation of
[21]:
natDec.component(1).irrepDimension
natDec.component(2).irrepDimension
ans = 1
ans = 2
The decomposition also provides the change of basis matrix which makes |this decomposition apparent
[22]:
basis = natDec.basis
basis =
0.3333 0.6667 -0.3333
0.3333 -0.3333 0.6667
0.3333 -0.3333 -0.3333
The images of the two elements of [2 1 3]
and [1 3 2]
are indeed block-diagonal in this basis:
[23]:
inv(basis)*natRep.image(element1)*basis
inv(basis)*natRep.image(element2)*basis
ans =
1 0 0
0 0 1
0 1 0
ans =
1 0 0
0 1 -1
0 0 -1
This shows that the natural representation of S(3) contains
One copy of the trivial representation of S(3)
One copy of the a faithful 2 x 2 representation of S(3)