Section 9.5 Sage
Sage has limited support for actually creating isomorphisms, though it is possible. However, there is excellent support for determining if two permutation groups are isomorphic. This will allow us to begin a little project to locate all of the groups of order less than in Sageβs permutation groups.
Subsection Isomorphism Testing
If
G
and H
are two permutation groups, then the command G.is_isomorphic(H)
will return True
or False
as the two groups are, or are not, isomorphic. Since βisomorpic toβ is an equivalence relation by Theorem 9.10, it does not matter which group plays the role of G
and which plays the role of H
.So we have a few more examples to work with, let us introduce the Sage command that creates an external direct product. If by Theorem 9.8.
G
and H
are two permutation groups, then the command direct_product_permgroups([G,H])
will return the external direct product as a new permutation group. Notice that this is a function (not a method) and the input is a list. Rather than just combining two groups in the list, any number of groups can be supplied. We illustrate isomorphism testing and direct products in the context of Theorem 9.21, which is an equivalence, so tells us exactly when we have isomorphic groups. We use cyclic permutation groups as stand-ins for First, two isomorphic groups.
xxxxxxxxxx
m = 12
n = 7
gcd(m, n)
xxxxxxxxxx
G = CyclicPermutationGroup(m)
H = CyclicPermutationGroup(n)
dp = direct_product_permgroups([G, H])
K = CyclicPermutationGroup(m*n)
K.is_isomorphic(dp)
Now, two non-isomorphic groups.
xxxxxxxxxx
m = 15
n = 21
gcd(m, n)
xxxxxxxxxx
G = CyclicPermutationGroup(m)
H = CyclicPermutationGroup(n)
dp = direct_product_permgroups([G, H])
K = CyclicPermutationGroup(m*n)
K.is_isomorphic(dp)
Notice how the simple computation of a greatest common divisor predicts the incredibly complicated computation of determining if two groups are isomorphic. This is a nice illustration of the power of mathematics, replacing a difficult problem (group isomorphism) by a simple one (factoring and divisibility of integers). Let us build one more direct product of cyclic groups, but with three groups, each with orders that are pairwise relatively prime.
If you try the following with larger parameters you may get an error (
database_gap
).xxxxxxxxxx
m = 6
n = 5
r = 7
G = CyclicPermutationGroup(m)
H = CyclicPermutationGroup(n)
L = CyclicPermutationGroup(r)
dp = direct_product_permgroups([G, H, L])
K = CyclicPermutationGroup(m*n*r)
K.is_isomorphic(dp)
Subsection Classifying Finite Groups
Once we understand isomorphic groups as being the βsameβ, or βfundamentally no different,β or βstructurally identical,β then it is natural to ask how many βreally differentβ finite groups there are. Corollary 9.9 gives a partial answer: for each prime there is just one finite group, with as a concrete manifestation.
Let us embark on a quest to find all the groups of order less than in Sage as permutation groups. For prime orders and we know there is really just one group each, and we can realize them all:
xxxxxxxxxx
[CyclicPermutationGroup(p) for p in [1, 2, 3, 5, 7, 11, 13]]
So now our smallest unknown case is order Sage knows at least three such groups, and we can use Sage to check if any pair is isomorphic. Notice that since βisomorphic toβ is an equivalence relation, and hence a transitive relation, the two tests below are sufficient.
xxxxxxxxxx
G = CyclicPermutationGroup(4)
H = KleinFourGroup()
T1 = CyclicPermutationGroup(2)
T2 = CyclicPermutationGroup(2)
K = direct_product_permgroups([T1, T2])
G.is_isomorphic(H)
xxxxxxxxxx
H.is_isomorphic(K)
So we have at least two different groups: and with the latter also known as the Klein 4-group. Sage will not be able to tell us if we have a complete list β this will always require theoretical results like Theorem 9.10. We will shortly have a more general result that handles the case of order but right now, a careful analysis (by hand) of the possibilities for the Cayley table of a group of order should lead you to the two possibilities above as the only possibilities. Try to deduce what the Cayley table of an order group should look like, since you know about identity elements, inverses and cancellation.
We have seen at least two groups of order (next on our list of non-prime orders). One is abelian and one is not, so we do not need Sage to tell us they are structurally different. But let us do it anyway.
xxxxxxxxxx
G = CyclicPermutationGroup(6)
H = SymmetricGroup(3)
G.is_isomorphic(H)
Is that all? There is but that is just since and are relatively prime. The dihedral group, all symmetries of a triangle, is just the symmetric group on symbols.
xxxxxxxxxx
G = DihedralGroup(3)
H = SymmetricGroup(3)
G.is_isomorphic(H)
Exercise 9.4.55 from this section classifies all groups of order where is a prime. Such a group is either cyclic or a dihedral group. So the two groups above, and are the complete list of groups of order
By this general result, in addition to order we also know the complete lists of groups of orders and To Be Continued.
Subsection Internal Direct Products
An internal direct product is a statement about subgroups of a single group, together with a theorem that links them to an external direct product. We will work an example here that will illustrate the nature of an internal direct product.
Given an integer the set of positive integers less than and relatively prime to forms a group under multiplication mod We will work in the set
Integers(n)
where we can add and multiply, but we want to stay strictly with multiplication only.First we build the subgroup itself. Notice how we must convert
x
into an integer (an element of ZZ
) so that the greatest common divisor computation performs correctly.xxxxxxxxxx
Z36 = Integers(36)
U = [x for x in Z36 if gcd(ZZ(x), 36) == 1]
U
So we have a group of order We are going to try to find a subgroup of order and a subgroup of order to form the internal direct product, and we will restrict our search initially to cyclic subgroups of order Sage has a method that will give the order of each of these elements, relative to multiplication, so let us examine those next.
xxxxxxxxxx
[x.multiplicative_order() for x in U]
We have many choices for generators of a cyclic subgroup of order and for a cyclic subgroup of order Of course, some of the choices for a generator of the subgroup of order will generate the same subgroup. Can you tell, just by counting, how many subgroups of order there are? We are going to pick the first element of order and the last element of order for no particular reason. After your work through this once, we encourage you to try other choices to understand why some choices lead to an internal direct product and some do not. Notice that we choose the elements from the list
U
so that they are sure to be elements of Z36
and behave properly when multiplied.xxxxxxxxxx
a = U[1]
A = [a^i for i in srange(6)]
A
xxxxxxxxxx
b = U[11]
B = [b^i for i in srange(2)]
B
So
A
and B
are two cyclic subgroups. Notice that their intersection is the identity element, one of our requirements for an internal direct product. So this is a good start.xxxxxxxxxx
[x for x in A if x in B]
Z36
is an abelian group, thus the condition on all products commuting will hold, but we illustrate the Sage commands that will check this in a non-abelian situation.xxxxxxxxxx
all([x*y == y*x for x in A for y in B])
Finally, we need to check that by forming products with elements from
A
and B
we create the entire group. Sorting the resulting list will make a check easier for us visually, and is required if we want Sage to do the check.xxxxxxxxxx
T = sorted([x*y for x in A for y in B])
T
xxxxxxxxxx
T == U
Thatβs it. We now condense all this information into the statement that β and a cyclic group of order So in a very real sense, which is in turn isomorphic to So we totally understand the βstructureβ of and so that
U
is the internal direct product of A
and B
.β By Theorem 9.27, we see that U
is isomorphic to a product of a cyclic group of order U
is no more or less complicated than U
. For example, we can see that U
is not cyclic, since when written as a product of cyclic groups, the two orders are not relatively prime. The final expression of U
suggests you could find three cyclic subgroups of U
, with orders U
is an internal direct product of the three subgroups.