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. Mathematica 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.

{permutation,phase}general form of a symmetry generator
TensorTranspose[tensor,gen]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.
In[1]:=
Click for copyable input
Out[1]=
This rank-4 array has symmetry because it stays invariant under the action of a phased permutation.
In[2]:=
Click for copyable input
In[3]:=
Click for copyable input
Out[3]=
In[4]:=
Click for copyable input
Out[4]=
However, it is not invariant under this other generator.
In[5]:=
Click for copyable input
Out[5]=
In[6]:=
Click for copyable input
Out[6]=

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.
In[7]:=
Click for copyable input
Out[7]=
Out[8]=
Out[9]=
Out[10]=
In[11]:=
Click for copyable input
Out[11]=
In[12]:=
Click for copyable input
Out[12]=
In[13]:=
Click for copyable input
Out[13]=

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.

TensorSymmetry[tensor]find the transposition symmetry of tensor
Symmetric[{s1,...,sn}]tensor keeps sign under exchange of any two slots
Antisymmetric[{s1,...,sn}]tensor changes sign under exchange of any two slots
ZeroSymmetric[{s1,...,sn}]symmetry of any zero tensor
{symgen1,...,symgenm}list of generators of the symmetry of a tensor
{sym1,...,symk}direct product of symmetry specifications

Computation and specification of tensor symmetries.

A symmetric matrix.
In[14]:=
Click for copyable input
Out[14]=
An antisymmetric rank-3 array.
In[15]:=
Click for copyable input
Out[15]=
The absence of symmetry, or identity symmetry, is represented by an empty list of generators.
In[16]:=
Click for copyable input
Out[16]=
Representation of the symmetry of a zero tensor.
In[17]:=
Click for copyable input
Out[17]=
In the general case, TensorSymmetry returns the symmetry of a tensor as a list of generators. Permutations are given in cyclic form.
In[18]:=
Click for copyable input
In[19]:=
Click for copyable input
Out[19]=
In[20]:=
Click for copyable input
Out[20]=

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,sym]symmetrize tensor to the symmetry sym
SymmetrizedArray[rules,dims,sym]construct an array with symmetry, giving its independent components
StructuredArray[SymmetrizedArray,dims,data]structured array representation of an array with symmetry

Tensor symmetrization and symmetrized arrays.

Take a general array with no symmetry.
In[21]:=
Click for copyable input
Out[21]=
Project into its antisymmetric part, with the result given as a structured array of type SymmetrizedArray, which stores only independent components.
In[22]:=
Click for copyable input
Out[22]=
It only contains one independent component.
In[23]:=
Click for copyable input
Out[23]=
That component is repeated multiple times in the normal form of the array.
In[24]:=
Click for copyable input
Out[24]=
It is a projection because further antisymmetrization does not change the array.
In[25]:=
Click for copyable input
Out[25]=
Symmetrization in any pair of levels now yields the zero array, with maximal symmetry.
In[26]:=
Click for copyable input
Out[26]=

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.

SymmetrizedIndependentComponents[dims,sym]independent components of an array with given dimensions and symmetry
SymmetrizedDependentComponents[comp,sym]dependent components associated to a given component under a symmetry

Independent and dependent components.

Take an array with symmetry.
In[27]:=
Click for copyable input
In[28]:=
Click for copyable input
Out[28]=
In[29]:=
Click for copyable input
Out[29]=
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.
In[30]:=
Click for copyable input
Out[30]=
In[31]:=
Click for copyable input
Out[31]=
There are six independent components for an array of dimensions with the transposition symmetries of a Riemann tensor.
In[32]:=
Click for copyable input
In[33]:=
Click for copyable input
Out[33]=
Asymptotically, it grows as , where is the order of the symmetry group, 8 for the Riemann symmetry.
In[34]:=
Click for copyable input
Out[34]=
In[35]:=
Click for copyable input
Out[35]=

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.
In[36]:=
Click for copyable input
Out[37]=
These are the 10 independent components, given as positions.
In[38]:=
Click for copyable input
Out[38]=
And these are their respective orbits of dependent components.
In[39]:=
Click for copyable input
Out[39]=
You can check that indeed all components in each orbit coincide.
In[40]:=
Click for copyable input
Out[40]=

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.
In[41]:=
Click for copyable input
Out[41]=
Symmetry given by several generators.
In[42]:=
Click for copyable input
Out[42]=
Product of symmetries.
In[43]:=
Click for copyable input
Out[43]=
Named symmetries can be mixed with symmetries gives by generators, both using permutation lists or permutation cycles.
In[44]:=
Click for copyable input
Out[44]=

For a phased permutation with a root of unity, in general you need to have , 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 is inconsistent because the order of the permutation is 3, but is a root of unity of order 2. The result is the empty list, because the zero tensor does not have independent components.
In[45]:=
Click for copyable input
Out[45]=
These two generators are consistent, but their combination gives a symmetry only compatible with the zero tensor.
In[46]:=
Click for copyable input
Out[46]=
Both cases are equivalent to specifying the zero symmetry directly.
In[47]:=
Click for copyable input
Out[47]=
New to Mathematica? Find your learning path »
Have a question? Ask support »