# How to determine computationally the set of linear independent permutations of a tensor with known symmetries?

I have a tensor $t$ with components $t_{i_1 i_2 \dots i_n}$. The tensor $t$ has some index symmetries $\{s_i\}_{i=1}^m$. Consider now all index permutations $p = \{\{1,2,3,\dots,n\},\{2,1,3,\dots,n\},\dots\}$. I consider a permutations $p_i$ as linear independent, if the application of the permutation on the tensor $\pi(t,p_i)$ delivers a tensor which is not linear dependent of $t$, i.e., $\nexists \alpha \in \mathbb{R}: \pi(t,p_i) \neq \alpha t$.

Question: how do you efficiently extract the set of linear independent permutations?

My approach until now is to use the symbolic tools in Mathematica. For example, I will generate a symbolic tensor t (just as one example)

\$Assumptions = {
Element[t1, Arrays[{3, 3, 3}, Reals, Antisymmetric[{1, 2, 3}]]]
, Element[t2, Arrays[{3, 3}, Reals, Symmetric[{1, 2}]]]
};
t = TensorProduct[t1, t2, t2];
ts = TensorSymmetry@t


{{Cycles[{{1, 2}}], -1}, {Cycles[{{2, 3}}], -1}, {Cycles[{{4, 5}}], 1}, {Cycles[{{6, 7}}], 1}, {Cycles[{{4, 6}, {5, 7}}], 1}}

where ts shows the index symmetries. Now, from all possible permutations p

p = Permutations@Range@TensorRank@t;


I will select the linear independent permutations as follows (the plus and minus cases arise due to the antisymmetric symmetries of t1 defined as an example above)

pli = Select[p,
Not[TensorReduce@TensorTranspose[t, #] === t ||
TensorReduce@TensorTranspose[t, #] === -t] &];


You can then see

Length@p
Length@pli


5040

4992

that, as expected, you can eliminate some of the p's, in this case 48 = 5040-4992 permutations were linearly dependent. Sadly, I have pretty large tensors and I am looking for efficient ways to improve the search for linear independent permutations. Any ideas? Thanks!

## 1 Answer

What you call the "linear independent permutations" are the permutations that do not belong to the symmetry group of the tensor. Hence a possible way to compute them is by finding the complement of those that do belong to the symmetry group. Using your notations:

group = PermutationGroup[First /@ ts];
syms = PermutationList[#, 7] & /@ GroupElements[group];


Then we have

Complement[p, syms] === pli
(* True *)