The Christoffel symbols - Maple Programming Help

Online Help

All Products    Maple    MapleSim

Home : Support : Online Help : Physics : Physics/Christoffel

Physics[Christoffel] - The Christoffel symbols

Calling Sequence



convert(expression, Christoffel)




the indices, as names representing integer numbers between 0 and the spacetime dimension, they can also be the numbers themselves



optional, it can be definition, array, nonzero



The all covariant Christoffel[mu, alpha, beta], displayed as Γ__μ,α,β, is a computational representation for the Christoffel symbols, defined in terms of derivatives of the spacetime metric as



where the spacetime differentiation operator ∂__mu is implemented in Maple as d_[mu]. From this definition, Christoffel is symmetric with respect to interchanging the second and third indices.


Christoffel can also have contravariant indices, typically the first one. When any of the indices of Christoffel is contravariant, the definition for its components is according to Γα,βμ=gμ,ρΓρ,α,β,Γμβα=gα,ρΓμ,ρ,β and Γμ,αβ=gβ,ρΓμ,α,ρ and not by raising the indices in the terms on the right-hand side of the definition above for Γ__μ,α,β. Note also that, despite computing with them as tensors, the Christoffel symbols are not actual tensors in that, when you transform the coordinates, they do not transform like the coordinate differentials (regarding their contravariant indices) nor like the derivatives of a scalar (regarding their covariant indices).


To express Γ__μ,α,β or Γα,βμ using this definition in terms of derivatives of the spacetime metric use convert to g_. Sometimes it is also convenient to rewrite tensorial expressions the other way around, in terms of the Christoffel symbols and its derivatives. For example: non-covariant derivatives of the metric or any of the general relativity tensors that can be expressed in terms of them. For this purpose you can use convert(expression, Christoffel) - see the Examples section.


When the indices of Christoffel assume integer values they are expected to be between 0 and the spacetime dimension, prefixed by ~ when they are contravariant, and the corresponding value of Christoffel is returned. The values 0 and 4, or for the case any dimension set for the spacetime, represent the same object. When the indices have symbolic values Christoffel returns unevaluated after normalizing its indices taking into account the symmetry property of the 2nd and 3rd indices.


Computations performed with the Physics package commands take into account Einstein's sum rule for repeated indices - see `.` and Simplify. The distinction between covariant and contravariant indices in the input of tensors is done by prefixing contravariant ones with ~, say as in ~mu; in the output, contravariant indices are displayed as superscripts. For contracted indices, you can enter them one covariant and one contravariant. Note however that - provided that the spacetime metric is galilean (Euclidean or Minkowski), or the object is a tensor also in curvilinear coordinates - this distinction in the input is not relevant, and so contracted indices can be entered as both covariant or both contravariant, in which case they will be automatically rewritten as one covariant and one contravariant. Tensors can have spacetime and space indices at the same time. To change the type of letter used to represent spacetime or space indices see Setup.


During a Maple session, the value of any component of Γ__μ,α,β is automatically determined by the value of the spacetime metric at the moment. When Physics is loaded, the spacetime is set to Minkowski type, and so all the elements of Christoffel are automatically zero. To set the spacetime metric to something different use Setup. Also, at least one system of coordinates must be set in order to compute the derivatives entering the definition of Christoffel. For that purpose see Coordinates or Setup.


Besides being indexed with three indices, Christoffel accepts three keywords:


definition: returns the definition of the Christoffel symbols in terms of derivatives of the metric g_.


array: (synonym: Array, or no indices whatsoever, as in Christoffel[]) returns an Array that when indexed with numerical values from 1 to the dimension of spacetime it returns the value of each of the components of Christoffel. If this keyword is passed together with indices, that can be covariant or contravariant, the resulting array takes into account the character of the indices. If one of these indices has a numerical value, if contravariant then preceded by ~, the returned object is the corresponding 2 x 2 Matrix.


nonzero: returns a set of equations, with the left-hand side as a sequence of three positive numbers identifying the element of Γ__μ,α,β and the corresponding value on the right-hand side. Note that this set is actually the output of the ArrayElems command when passing to it the Array obtained with the keyword array.


Some automatic checking and normalization are carried out each time you enter Christoffel[...]. The checking is concerned with possible syntax errors. The automatic normalization takes into account the symmetry of Christoffel[mu, alpha, beta] with respect to interchanging the positions of the indices alpha and beta.


The %Christoffel command is the inert form of Christoffel, so it represents the same mathematical operation but without performing it. To perform the operation, use value.



Setup(mathematicalnotation = true);



Set up a coordinate system to work with - the first one to be set is automatically taken as the differentiation variables for d_, the covariant derivative D_ and the dAlembertian

Setup(coordinatesystems = cartesian);

Default differentiation variables for d_, D_ and dAlembertian are:X=x,y,z,t

Systems of spacetime coordinates are:X=x,y,z,t



When Physics is initialized, the default spacetime metric is of Minkowski type. You can see the metric by querying Setup, as in Setup(metric);, or by directly entering the metric g_ with no indices




Check the nonzero components of Christoffel: because the default spacetime is of Minkowski type, there are none





Christoffel[mu, alpha, beta];



Consequently, all the general relativity tensors defined in terms of Christoffel and derivatives of the metric g_ are also automatically zero

Einstein[mu, nu];



Ricci[mu, nu];



Riemann[mu, nu, rho, sigma];



Weyl[mu, nu, rho, sigma];



For the same reason the covariant derivative ▿__mu=∂__mu; for illustration purposes Define an arbitrary spacetime tensor A


Defined objects with tensor properties






To set the scenario to be an arbitrary non-galilean spacetime, set the metric to be arbitrary (that is, depending on 10 arbitrary functions of the spacetime coordinates X)

Setup(metric = arbitrary);






When the indices are not numerical, Christoffel returns itself after normalizing its second and third indices taking advantage of the symmetry under exchange of them

Christoffel[mu, alpha, beta];



Christoffel[mu, beta, alpha];



(14) - (15);



To express Christoffel in terms of its definition in terms of the spacetime metric g_, use convert to g_

convert((14), g_);



To rewrite expressions like this one back in terms of Christoffel and its derivatives use convert(... Christoffel)

convert((17), Christoffel);






convert((19), Christoffel);






convert((21), g_);



convert((22), Christoffel);






Related to displaying the components of Christoffel, it is convenient to have a compact display of the 10 arbitrary functions entering the metric as well as of their derivatives; for that purpose use the enhanced display scheme of the differential equation packages.


_F1Xwill now be displayed as_F1

_F10Xwill now be displayed as_F10

_F2Xwill now be displayed as_F2

_F3Xwill now be displayed as_F3

_F4Xwill now be displayed as_F4

_F5Xwill now be displayed as_F5

_F6Xwill now be displayed as_F6

_F7Xwill now be displayed as_F7

_F8Xwill now be displayed as_F8

_F9Xwill now be displayed as_F9


So from herein, in the display of expressions, derivatives are displayed as indexed and the functionality of the arbitrary functions is suppressed.

Check the value of Γ__α,μ,ν for α = μ = ν = 1

Christoffel[1, 1, 1];



Now of Γα,βμ for α = μ = ν = 1 (note you enter the contravariant index prefixed by ~)

Christoffel[~1, 1, 1];