# Tensor Symmetries

Invariance under Phased Permutations | Symmetrization of Arrays |

Symmetry Specifications | More on Symmetry Specifications |

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.

{permutation,phase} | general form of a symmetry generator |

TensorTranspose[tensor,gen] | action of a symmetry generator on a tensor |

Symmetry generators and tensor transposition.

In[1]:= |

Out[1]= |

In[2]:= |

In[3]:= |

Out[3]= |

In[4]:= |

Out[4]= |

In[5]:= |

Out[5]= |

In[6]:= |

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.

In[11]:= |

Out[11]= |

In[12]:= |

Out[12]= |

In[13]:= |

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[{s_{1},…,s_{n}}] | tensor keeps sign under exchange of any two slots |

Antisymmetric[{s_{1},…,s_{n}}] | tensor changes sign under exchange of any two slots |

ZeroSymmetric[{s_{1},…,s_{n}}] | symmetry of any zero tensor |

{symgen_{1},…,symgen_{m}} | list of generators of the symmetry of a tensor |

{sym_{1},…,sym_{k}} | direct product of symmetry specifications |

Computation and specification of tensor symmetries.

In[14]:= |

Out[14]= |

In[15]:= |

Out[15]= |

In[16]:= |

Out[16]= |

In[17]:= |

Out[17]= |

In[18]:= |

In[19]:= |

Out[19]= |

In[20]:= |

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.

In[21]:= |

Out[21]= |

In[22]:= |

Out[22]= |

In[23]:= |

Out[23]= |

In[24]:= |

Out[24]= |

In[25]:= |

Out[25]= |

In[26]:= |

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.

In[27]:= |

In[28]:= |

Out[28]= |

In[29]:= |

Out[29]= |

In[30]:= |

Out[30]= |

In[31]:= |

Out[31]= |

In[32]:= |

In[33]:= |

Out[33]= |

In[34]:= |

Out[34]= |

In[35]:= |

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.

In[36]:= |

Out[37]= |

In[38]:= |

Out[38]= |

In[39]:= |

Out[39]= |

In[40]:= |

Out[40]= |

## More on Symmetry Specifications

The function SymmetrizedIndependentComponents is used to give some more examples of symmetry specifications.

In[41]:= |

Out[41]= |

In[42]:= |

Out[42]= |

In[43]:= |

Out[43]= |

In[44]:= |

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.

In[45]:= |

Out[45]= |

In[46]:= |

Out[46]= |

In[47]:= |

Out[47]= |