Riemann - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim

Physics[Riemann] - The Riemann tensor and the computation of the Riemann invariants

Calling Sequence

Riemann[alpha, beta, mu, nu]


Riemann[alpha, beta, mu, nu, keyword]

convert(expression, Riemann)


alpha, beta, mu, nu


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



any of definition, matrix, array, nonzero, scalars and invariants



The Riemann[alpha, beta, mu, nu], displayed as R__α,β,μ,ν, is a computational representation for the Riemann tensor, defined with a contravariant first index in terms of the Christoffel symbols and derivatives as



and Rα,β,μ,ν=gα,ρRβ,μ,νρ. From this definition, and because of the symmetries of the Christoffel symbols with respect to interchanging the positions of their second and third indices the Riemann tensor is antisymmetric with respect to interchanging the position of its 1st and 2nd indices, or 3rd and 4th indices, and symmetric with respect to interchanging the positions of the 1st and 2nd pair of indices.


It is sometimesconvenient to rewrite tensorial expressions in terms of the Riemann tensor. For this purpose you can use convert(expression, Riemann).


When the indices of Riemann 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 Riemann 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 Riemann returns unevaluated after normalizing its indices taking into account their symmetry properties.


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 R__α,β,μ,ν 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 Riemann 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 the Christoffel symbols, used to construct the Riemann tensor. For that purpose see Coordinates or Setup.


Besides being indexed with four indices, Riemann accepts the following keywords:


definition: returns the definition of the Riemann tensor in terms of the Christoffel symbols and their derivatives.


array: (synonym: Array, Matrix, matrix, or no indices whatsoever, as in Riemann[]) 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 Riemann. If this keyword is passed preceded by the tensor indices, that can be covariant or contravariant, the values in the resulting array are computed taking into account the character of the given indices. If only two of these indices are names, the rest have numerical values (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 two positive numbers identifying the element of R__μ,ν 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.


scalars: returns the two complex scalars S1 and S2






where (R*)α,β,μ,ν is the dual of the Riemann tensor





and Ε__μ,ν,ρ,σ is the LeviCivita tensor in curvilinear coordinates (see Setup, option levicivita = nongalilean)





and ϵ__μ,ν,ρ,σ is the galilean LeviCivita and g is the determinant of the spacetime metric. These scalars S1 and S2 enable one to calculate the invariants that permit classifying the canonical forms of the Riemann curvature tensor starting from the values of R__α,β,μ,ν in any reference system.


invariants: returns a sequence with the 16 invariants presented by Carminati and McLenaghan (see reference at the bottom), frequently labeled r0 for the Ricci scalar and r1,r2,r3,w1,w2,m1,m2,m3,m4,m5. The 6 invariants, the rj,m3 and m4 are real, the other 5 are complex. These invariants are all defined in terms of the Weyl tensor Cα,β,μ,ν, its dual *Cα,β,μ,ν defined as in the formula above for the dual of the Riemann tensor, and the trace-free Ricci tensor Sμ,ν=Rμ,νRααgμ,ν. The sequence of invariants is returned as a sequence of equations with the labels ri,wk,ml using local variables in the left-hand sides and the corresponding scalar invariant expressions in the right-hand sides.


Some automatic checking and normalization are carried out each time you enter Riemann[...]. The checking is concerned with possible syntax errors. The automatic normalization takes into account the symmetry properties of the indices of Rα,β,μ,ν as described in the first paragraph.


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






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


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 querying Setup, as in Setup(metric);, or directly entering the metric as g_[], with no indices




Check the nonzero components of Christoffel, used to construct the Riemann tensor entering the definition of Riemann: because the default spacetime is of Minkowski type, there are none











and the same is valid for all the general relativity tensors defined in terms of Christoffel and derivatives of the metric g_. To set the scenario as a curved spacetime set the metric using Setup, for instance indicating the square of the spacetime interval. In this example, we also choose to work in spherical coordinates, so consider for instance the metric defined by





Systems of spacetime coordinates are:X=r,θ,φ,t


Coordinates: r,θ,φ,t. Signature: - - - +




Setting lowercaselatin_is letters to represent space indices




Now when the indices are not numerical, Riemann returns itself after normalizing its indices taking advantage of their symmetry properties, so that different forms of the same tensor enter computations in the same manner, for example, if you interchange the positions  as in










To express Riemann in terms of the Christoffel symbols and its derivatives convert to Christoffel




Check the value of R__α,β,μ,ν, say for α=1, β = 2, μ = 2, ν = 4




Check now the value of Rβ,μ,να , with the 1st index contravariant, for the same values of the indices (note you enter the value of the contravariant index prefixed by ~)




To compute with a representation for Riemann without actually performing the operation, use the inert form %Riemann. To afterwards perform the operation use value







To have a more compact display in the following examples, suppress the display of the dependency of kr,t and have the display of derivatives in jet notation, indexed (see Typesetting)



The nonzero values of R__α,β,μ,ν and of Rβ,μ,να (note you enter the character of the contravariant indices prefixed by ~)







The Riemann scalars S1,S2 (see the Description)




The 16 Riemann invariants presented in the paper by Carminati and McLenaghan (see the Description and the reference at the bottom)




Compute now the Array form of R__α,β,μ,ν 


As with all the general relativity tensors of the Physics package, you can obtain the same result for the all covariant case by entering the tensor without indices, as in Riemann[].

This is the array form of Rβ,μ,να (note you enter the character of the contravariant indices prefixed by ~)


To use this array, because its components were computed already taking into account the (covariant/contravariant) character of its indices, you do not need to indicate furthermore that character. So for R11 we have




Compare with the output obtained entering Riemann[~1, 2, 2, 4] in eq (15)




The Ricci tensor is defined in terms of the Riemann tensor as Rμ,ν=Rμ,α,να You can see how the four Riemann matrices add to form the Ricci matrix; for this purpose give values to the 1st and 3rd indices and pass the extra keyword matrix (or array)







Compare with the Ricci matrix




Upon simplification these matrices are the same




See Also

`.`, Array, ArrayElems, Christoffel, Coordinates, DifferentialGeometry[Tensor][RiemannInvariants], Einstein, g_, Physics, Physics conventions, Physics examples, Physics Updates, Tensors - a complete guide, Mini-Course Computer Algebra for Physicists, Ricci, Setup, Typesetting, value, Weyl



Landau, L.D., and Lifshitz, E.M. The Classical Theory of Fields, Course of Theoretical Physics Volume 2, fourth revised English edition. Elsevier, 1975.


Carminati, J., and McLenaghan, R. G., "Algebraic invariants of the Riemann tensor in a four-dimensional Lorentzian space", J.Math.Phys. 32 (11), November 1991.