# Why does Arrays interpret lists as Cycles?

I entered the command:

Arrays[{4, 4, 4, 4}, Reals,
{{{2, 1, 3, 4}, -1}, {{3, 4, 1, 2}, 1}}
]


whose third argument is a list of lists, and got the result:

Arrays[{4, 4, 4, 4}, Reals,
{{Cycles[{{1, 2}}], -1}, {Cycles[{{1, 3}, {2, 4}}], 1}, {Cycles[{{3, 4}}], -1}}
]


The Mathematica documentation says the following about the third argument of Arrays:

The symmetry sym can be given in several forms. First, it can be given as expressions like Symmetric[{s1,…,sk}] or Antisymmetric[{si,…,sk}], with the slots si being different positive integers between 1 and the rank r. It can also be given as a list of generators of the form {perm,ϕ}, representing that the array stays invariant under simultaneous transposition by the permutation perm and multiplication by the root of unity ϕ. In addition, it can be given as the internal direct product {sym1, sym2, …} of those forms.

There is no mention of a list of lists as an argument. So why is Mathematica executing the command instead of generating an error message?

• The third argument can be of the form {sym1, sym2,…} where each of sym_i can be of the form {perm, φ}. The permutation seems to be converted into a cycles representation. Are you asking why {Cycles[{{3, 4}}], -1} also shows up in addition to the two symmetries you specified? – Szabolcs Sep 2 '16 at 18:53
• It looks like the symmetries are decomposed into some sort of canonical form. – mikado Sep 2 '16 at 21:06

The two elements in {{{2, 1, 3, 4}, -1}, {{3, 4, 1, 2}, 1}} are the generators of a group. Arrays automatically produces an equivalent generating set which is more suitable for computationally working with the group.

It does two transformations. First it puts the permutations into a canonical form: it converts them to a Cycles representation.

Second, it computes a strong generating set. This is a generating set that allows for faster computational manipulation of the group. It is described in the Permutation Groups tutorial, Strong Generating Set Representation section. Not being familiar with the underlying mathematics, I cannot comment on the advantages of this, except show how to obtain it within Mathematica:

Last@First@GroupStabilizerChain@PermutationGroup[{{2, 1, 3, 4}, {3, 4, 1, 2}}]

(* PermutationGroup[{Cycles[{{1, 3}, {2, 4}}], Cycles[{{1, 2}}], Cycles[{{3, 4}}]}] *)


The original generating set you provided has two elements. This one has three, Cycles[{{3, 4}}] being the additional one.

The xPerm package (which is older than the built in tensor symmetry functionality) can perform the same tasks. Its documentation has a more detailed description of the underlying mathematics and methods, with many references.

I don't understand the question: Mathematica likes to represent permutations as products of cycles (do a help on "Permutations"), so it seems natural that it would represent the symmetry group of the array in that form.

• OK, but where does {Cycles[{{3, 4}}], -1} come from? It's not in the input. {Cycles[{{1, 2}}], -1}, {Cycles[{{1, 3}, {2, 4}}], 1} are just cycles forms of the input. – Szabolcs Sep 13 '16 at 10:29
• @Szabolcs The list of permutations (with signs) is a list of generators of the symmetry group of the array, so Mathematica is free to transform it into any other list of things which generates the same group. Now, I can imagine that Mathematica wants to find the "simplest" permutations in the group - after all, it is useful to know that switching 3rd and 4th rows flips sign. – Igor Rivin Sep 13 '16 at 10:40
• I probably didn't articulate the question well because I am not familiar enough with the mathematics. I thought that there must be something special about this generating set that makes it particularly suitable as a canonical form (if it is indeed a canonical form).I do see why exchanging the 3rd and 4th tensor indices (not rows!) must change the sign.But is there a good reason to choose this particular non-minimal generating set? Is there a good reason to include this specific element of the group in addition to the other two? Why not include another one, e.g. {Cycles[{{1, 4, 2, 3}}], -1}? – Szabolcs Sep 13 '16 at 12:07
• Then maybe there isn't really anything interesting here, and I am mistaken thinking that there was. :-) – Szabolcs Sep 13 '16 at 12:08
• Looking a bit at the xPerm package, which performs the same kinds of computations, I get the impression that this is indeed the case. – Szabolcs Sep 14 '16 at 9:46