# Create group from multiplication table

Suppose I have a multiplication table for a group. For example,

m = {{1, 2, 3, 4}, {2, 3, 4, 1}, {3, 4, 1, 2}, {4, 1, 2, 3}}


I would like to create a group from this table, i.e., end up with the equivalent of

group = CyclicGroup


As far as I can see, the only tool for creating groups is PermutationGroup[]...? So I would have to compute the permutations from the multiplication table m.

• Would you be willing to add another example or two? The scope of your question is not clear to me. Does your input always reduce to a simple CyclicGroup or do you need something more robust than that? Nov 12, 2014 at 13:04
• @Mr.Wizard: Cannot add another example right now, but in general I have a (possibly large) mult table for a group, and I would like to get a Mathematica group object out of it. Could be any finite group. Nov 12, 2014 at 13:53

The multiplication table is itself a list of permutations of a representation of the group so you can do

In:= m = {{1, 2, 3, 4}, {2, 3, 4, 1}, {3, 4, 1, 2}, {4, 1, 2, 3}};

In:= G = PermutationGroup[m];


Now you can compute group properties as usual:

In:= GroupOrder[G]
Out= 4


In this case the permutation representation obtained is exactly the same used by CyclicGroup, so you can check that they have the same elements:

In:= G == CyclicGroup
Out= True


This happens because CyclicGroup has order 4 and is represented with degree 4 as well.

As a counterexample, take DihedralGroup. It is implemented as a permutation representation of degree 4:

In:= PermutationMax[DihedralGroup]
Out= 4


but has order 8:

In:= GroupOrder[DihedralGroup]
Out= 8


Now:

In:= m = DihedralGroup // GroupMultiplicationTable
Out= {{1, 2, 3, 4, 5, 6, 7, 8}, {2, 1, 4, 3, 6, 5, 8, 7}, {3, 7, 1,5, 4, 8, 2, 6}, {4, 8, 2, 6, 3, 7, 1, 5}, {5, 6, 7, 8, 1, 2, 3, 4}, {6, 5, 8, 7, 2, 1, 4, 3}, {7, 3, 5, 1, 8, 4, 6, 2}, {8, 4, 6, 2, 7, 3, 5, 1}}

In:= G = PermutationGroup[m];


This gives a permutation representation of degree 8 of the same abstract group. But the groups are different:

In:= G == DihedralGroup
Out= False


That is, they are different representations of the same abstract group.