Description:
-
Canonical puts a tensor expression into its equivalent normal form. If the input is a single tensor, the output is the canonical form, characterized by the indices being in the least ordering (the definition of permutation ordering is given in the references below) taking into account the tensor symmetries as defined by
CanonDefine
.
-
Tensors are indexed objects such as T[a,-b] where T is the tensor name, and positive (negative) indices represent contravariant (covariant) indices. Dummy indices are represented by repeated indices with opposite sign, such as T[i,-i]. Dummy indices may have symmetries induced by the symmetries of the metric tensor. There are 3 cases: (1) symmetric metric (as usual in tensor calculus), T[i,-i]=T[-i,i], (2) anti-symmetric metric (as usual in spinor calculus), T[i,-i]=-T[-i,i], and (3) metric with no symmetry (as usual in affine calculus), T[i,-i]
T[-i,i]}. Canon uses the global variable CanonMetricSymmetry := 1,-1 or 0 to specify the3 cases. By default it is assigned the +1 value.
-
If Canonical finds a product of tensors, it merges each term into a single tensor. Then it finds the symmetries of the merged tensor, using the symmetries of the factors previously stored in the CanonSymmetryTable with the command
CanonDefine
, as well as exchange symmetries between instances of the same tensor, in order to canonicalize each term and the whole expression.
-
Numerical indices are not allowed.
-
The algorithms used internally by the code are described in L.R.U. Manssur, R. Portugal, B.F. Svaiter, Group-theoretic Approach for Symbolic Tensor Manipulation, Int. J. Mod. Phys. C,
13
(2002) 859-880 and R. Portugal, Algorithmic Simplification of Tensor Expressions, J. Phys. A: Math. Gen.
32
(1999) 7779-7789.
Examples:
>
with(Canon):
>
CanonDefine(T,2,{[-1,[[1,2]]]});
>
Canonical(T[a,-b]*T[b,-c]);
>
CanonDefine(R,4,{[-1,[[1,2]]],[[1,3],[2,4]]});
>
Canonical(R[-e,n,m,b]*R[-b,-c,a,d]*R[-d,c,-a,e]);
>
expr := CanonPrint(R[a,b,c,d]*R[e,f,k,h]*R[i,-a,-j,-e]*R[-b,-c,-d,-i]*R[-f,-k,-h,j]);
>
Canonical(expr);