Tensor Symmetries

Tensors of rank 2 or higher that arise in applications usually have symmetries under exchange of their slots. For example, the inertia tensor, the stress-energy tensor, or the Ricci curvature tensor are rank-2 fully symmetric tensors; the electromagnetic tensor is a rank-2 antisymmetric tensor; and the Riemann curvature tensor and the stiffness tensor are rank-4 tensors with nontrival symmetries. The Wolfram System has a general language to describe an arbitrary symmetry under permutations of the slots of any tensor and implements efficient algorithms to give those tensors a unique canonical form under those symmetries, an essential step in symbolic tensor computations.
Invariance under Phased Permutations
The basic action on a tensor is formed by a transposition by a permutation and multiplication by a root of unity. If a tensor is invariant under such action, it can be said that the tensor has symmetry.
general form of a symmetry generator
action of a symmetry generator on a tensor
Symmetry generators and tensor transposition.
A symmetry generator, or phased permutation, is a list containing a permutation describing how to permute the slots of a tensor and a root of unity that will simultaneously multiply the tensor:
This rank-4 array has symmetry because it stays invariant under the action of a phased permutation:
However, it is not invariant under this other generator:
Successive application of generators is equivalent to a product of generators, where phases and permutations are multiplied separately. In fact, if a tensor is invariant under two phased permutations, then it will be also invariant under their product. Hence, the set of phased permutations under which a tensor is invariant form a group, the slot symmetry group of the tensor.
If an array is invariant under a generator, then it is also invariant under its powers:
Symmetry Specifications
The function TensorSymmetry returns a complete description of the transposition symmetry of a tensor. It can be given as a named symmetry or as a list of some symmetry generators from which the rest can be constructed by permutation products and powers.
find the transposition symmetry of tensor
tensor keeps sign under exchange of any two slots si
tensor changes sign under exchange of any two slots si
symmetry of any zero tensor
list of generators of the symmetry of a tensor
direct product of symmetry specifications
Computation and specification of tensor symmetries.
A symmetric matrix:
An antisymmetric rank-3 array:
The absence of symmetry, or identity symmetry, is represented by an empty list of generators:
Representation of the symmetry of a zero tensor:
In the general case, TensorSymmetry returns the symmetry of a tensor as a list of generators. Permutations are given in cyclic form:
Symmetrization of Arrays
It is possible to increase the symmetry of an array by symmetrizing it, using the function Symmetrize. The result is given as a structured array of type SymmetrizedArray. For more information on this type of structure see "Symmetrized Arrays".
symmetrize tensor to the symmetry sym
construct an array with symmetry, giving its independent components
structured array representation of an array with symmetry
Tensor symmetrization and symmetrized arrays.
Take a general array with no symmetry:
Project into its antisymmetric part, with the result given as a structured array of type SymmetrizedArray, which stores only independent components:
It only contains one independent component:
That component is repeated multiple times in the normal form of the array:
It is a projection because further antisymmetrization does not change the array:
Symmetrization in any pair of levels now yields the zero array, with maximal symmetry:

Independent and Dependent Components

When a tensor or array has symmetry, then there is less freedom to specify its components. The symmetries actually specify relations among the components, and only some of them are independent.
independent components of an array with given dimensions and symmetry
dependent components associated to a given component under a symmetry
Independent and dependent components.
Take an array with symmetry:
The array has only four entries freely specifiable, and you can show that this is actually the maximum number compatible with its dimensions and symmetry:
There are six independent components for an array of dimensions {3,3,3,3} with the transposition symmetries of a Riemann tensor:
Asymptotically, it grows as , where is the order of the symmetry group, 8 for the Riemann symmetry:
The dependent components associated to a given independent component can be obtained using orbit computations under the associated permutation group of the symmetry.
Take a generic symmetrized array of rank 3 in dimension 3:
These are the 10 independent components, given as positions:
And these are their respective orbits of dependent components:
You can check that indeed all components in each orbit coincide:
More on Symmetry Specifications
The function SymmetrizedIndependentComponents is used to give some more examples of symmetry specifications.
Symmetry given by a single generator, with complex phase:
Symmetry given by several generators:
Product of symmetries:
Named symmetries can be mixed with symmetries gives by generators, both using permutation lists or permutation cycles:
For a phased permutation {perm,ϕ} with ϕ a root of unity, in general you need to have ϕn1, where n is the permutation order of perm, as given by PermutationOrder[perm]. Otherwise, the generator can only be a symmetry of the zero tensor, and in such a case that generator is referred to as inconsistent or self-inconsistent. A tensor symmetry may also be compatible only with the zero tensor, even if it is expressed with generators that are self-consistent. That is, the composition of self-consistent generators may give a self-inconsistent generator.
The generator {{2,3,1},-1} is inconsistent because the order of the permutation is 3, but -1 is a root of unity of order 2. The result is the empty list, because the zero tensor does not have independent components:
These two generators are consistent, but their combination gives a symmetry only compatible with the zero tensor:
Both cases are equivalent to specifying the zero symmetry directly: