xTras Tutorial | |Functions » |

A *symmetrized* derivative covariant derivative is symmetrization of a number of covariant derivatives:

The main advantage of symmetrized derivatives is that they have a greater degree of symmetry than non-symmetrized (or ordinary) derivatives. For instance, it is obvious that the following is zero:

However, when we write out the symmetrized derivative, it is not immediately clear that the expression is zero:

Of course, when we write as a commutator, we recover zero. But the point is that eliminating commutators is something the xTensor canonicalizer does not do. So it is often necessary to explicitly symmetrize covariant derivatives in order to fully canonicalize an expression.

SymmetrizeCovDs | symmetrizes covariant derivatives |

ExpandSymCovDs | de-symmetrizes covariant derivatives |

$AutoSymmetrizeCovDs | when set to True, derivatives are automatically symmetrized |

Functions for symmetrizing and de-symmetrizing covariant derivatives.

Symmetrized covariant derivatives are implement in xTras as follows. Whenever a covariant derivative CD is defined to be *symmetrizable*, CD[-a,-b] will mean (and likewise for more indices). A covariant derivative can be defined to symmetrizable by giving the option SymCovDQ -> True to DefCovD or DefMetric:

In[1]:= |

Now define a metric and covariant derivative. We need to specify SymCovDQ in order to make the covariant derivative symmetrizable.

In[2]:= |

In[22]:= |

Out[22]= |

In[25]:= |

Out[25]= |

In[29]:= |

Out[29]= |

Notice that two symmetrized derivatives acting on each other are not automatically symmetrized further. We need to call SymmetrizeCovDs again to do so explicitly:

In[31]:= |

Out[31]= |

However, when we set $AutoSymmetrizeCovDs to True, all derivatives that are not fully symmetrized will automatically get symmetrized:

In[32]:= |

Out[32]= |

In[34]:= |

Out[34]= |

In[35]:= |

Out[35]= |

In[36]:= |

Out[36]= |

Because symmetrizing derivatives is a an operation the grows exponentially in complexity (see the section on performance below), the function SymmetrizeCovDs stores its results in the variable $SymCovDCache. The cache can be cleared with ClearSymCovDCache:

In[43]:= |

In[44]:= |

Out[44]= |

In[45]:= |

Out[45]= |

In[46]:= |

Out[46]= |

In[47]:= |

Out[47]= |

This is because SymmetrizeCovDs spents some time on store the results in the cache. If you plan on symmetrizing a lot of derivatives, using the cache is faster in the long run.

The implementation of symmetrizing derivatives is exponentially complex in the number of derivatives. SymmetrizeCovDs has an optimized algorithm in the case when there is no torsion. Whenever there is torsion, a slower algorithm is used.

Because it is always possible to commute adjacent covariant derivatives by introducing curvature, a symmetrized covariant derivative can in general be expressed as

By induction, we can deduce that a single ordinary derivative can be eaten by a symmetrized derivative as follows:

Although it is not explicitly indicated after the last equal sign because it would clutter notation, all indices above are symmetrized over.

This expression for the operator is not completely closed; it contains terms of the form

This expression for the operator is not completely closed; it contains terms of the form

for which it is quite hard to find a closed formula relating it to .

However, whenever there is no torsion, the operator can be expressed as

However, whenever there is no torsion, the operator can be expressed as

where the commutator in the first term does not act on the indices of , but only on the expression on which the operator acts. Furthermore, the numeric functions are given by

where is the UnitStep function. Note that with fixed and gets fed into the next iteration of as its ).

A similar closed form for with torsion should also exist.

A similar closed form for with torsion should also exist.

Counting the number of terms on boths sides provides a consistency check on this formula; the left-hand-side has terms, the same as the right-hand-side, namely .

Lastly, the action of a Leibnitz symmetrized derivative on a generic function with arguments can be written as the following generalized chain rule:

This a generalization of Faà di Bruno's formula. Here , and the contracted indices are summed over. Furthermore, denotes the set of partitions of into integers (to be precise, is the result of IntegerPartitions[n, {i}]). And is the weighted multinomial