Wolfram Research

Function Repository Resource:

FindGroupIsomorphism

Source Notebook

Find up to a specified number of isomorphisms between two permutation groups

Contributed by: Daniel McDonald

ResourceFunction["FindGroupIsomorphism"][g1,g2]

finds an isomorphism between permutation groups g1 and g2.

ResourceFunction["FindGroupIsomorphism"][g1,g2,n]

finds up to n isomorphisms.

ResourceFunction["FindGroupIsomorphism"][g1,g2,n,form]

finds up to n isomorphisms, each having head form.

Details and Options

The optional fourth argument form determines the format of each isomorphism returned.
The default value of form is List, which formats each isomorphism as a permutation list, where positive integer i being in position j indicates that the isomorphism sends the jth element of GroupElements[g1] to the ith element of GroupElements[g2].
If form has value Cycles, then each isomorphism is formatted as a disjoint cycle representation of its representative permutation list.
If form has value Association, then each isomorphism is formatted as an association whose key-value pairs are corresponding elements of g1 and g2 in the isomorphism.

Examples

Basic Examples

Find an isomorphism between two groups:

In[1]:=
ResourceFunction["FindGroupIsomorphism"][
 PermutationGroup[{Cycles[{{1, 2, 3}}], Cycles[{{1, 2, 3}, {5, 6}}], Cycles[{{5, 6}}], Cycles[{{2, 3}}]}], DihedralGroup[6]]
Out[1]=

Find three isomorphisms between two Abelian groups:

In[2]:=
ResourceFunction["FindGroupIsomorphism"][AbelianGroup[{2, 3}], AbelianGroup[{3, 2}], 3, Association]
Out[2]=

Find all automorphisms of the symmetric group of degree four:

In[3]:=
ResourceFunction["FindGroupIsomorphism"][SymmetricGroup[4], SymmetricGroup[4], All, Cycles]
Out[3]=

Scope

FindGroupIsomorphism works on groups with head PermutationGroup, SymmetricGroup, AlternatingGroup, CyclicGroup, DihedralGroup or AbelianGroup.

Applications

Test if two groups are isomorphic by seeing if there is at least one isomorphism between them:

In[4]:=
isomorphicGroupsQ[group1_, group2_] := Length[ResourceFunction["FindGroupIsomorphism"][group1, group2, 1]] == 1

See that the following two groups are isomorphic:

In[5]:=
isomorphicGroupsQ[SymmetricGroup[3], DihedralGroup[3]]
Out[5]=

See that the following two groups are not isomorphic:

In[6]:=
isomorphicGroupsQ[SymmetricGroup[4], DihedralGroup[4]]
Out[6]=

Compute the automorphism group Aut(G) of a group G by finding all isomorphisms from that group to itself:

In[7]:=
groupAutomorphismGroup[group_] := PermutationGroup[
  ResourceFunction["FindGroupIsomorphism"][group, group, All, "IsomorphismFormat" -> Cycles]]

Find the automorphism group of the following group:

In[8]:=
groupAutomorphismGroup[
 PermutationGroup[{Cycles[{{1, 2, 3}}], Cycles[{{1, 3}, {5, 6}}]}]]
Out[8]=

Properties and Relations

Format the isomorphism as a permutation list:

In[9]:=
{isoList} = ResourceFunction["FindGroupIsomorphism"][SymmetricGroup[4], GraphAutomorphismGroup[CompleteGraph[4]]]
Out[9]=

Format the isomorphism as a disjoint cycle representation of its representative permutation list:

In[10]:=
ResourceFunction["FindGroupIsomorphism"][SymmetricGroup[4], GraphAutomorphismGroup[CompleteGraph[4]], 1, Cycles]
Out[10]=

This is equivalent to wrapping the permutation list representation of the isomorphism with PermutationCycles:

In[11]:=
PermutationCycles[isoList]
Out[11]=

Format the isomorphism as an association:

In[12]:=
ResourceFunction["FindGroupIsomorphism"][SymmetricGroup[4], GraphAutomorphismGroup[CompleteGraph[4]], 1, Association]
Out[12]=

This is equivalent to creating an association by threading the domain group elements to the permutation of the range group elements provided by the isomorphism:

In[13]:=
AssociationThread[
 GroupElements[SymmetricGroup[4]] -> GroupElements[GraphAutomorphismGroup[CompleteGraph[4]]][[isoList]]]
Out[13]=

Requirements

Wolfram Language 11.3 (March 2018) or above

Resource History

License Information