The Ricci Tensor

The Ricci tensor describes the curvature of a smooth manifold (or, rather, of a differential operator on it); in General Relativity the smooth manifold in question is space-time (and the differential operator in question is the one for which the metric of space-time is constant) and the Ricci tensor is the entity directly related, by Einstein's field equation, to the stress tensor which describes the presence of matter. The Ricci tensor arises as a trace of the Riemann tensor which, in turn, is obtained by taking the second derivatives of tensor fields and antisymmetrising over the gradient-rank factors added to the tensor fields' ranks in so doing.

Now, it so happens that the construction, starting with a differential operator and yielding its Ricci tensor, can actually be applied to a broad class of tensor operators, which I describe as Leibniz operators. A minor tweak is required in the course of the generalised construction to dodge a special case property presumed in the case which applies to General Relativity: I define the Ricci tensor as a sum of two traces, one of which is reliably zero in a broad class of cases including General Relativity, instead of just as the other term in the sum.


In the following derivation, I shall presume results demonstrated in my examination of the generalised Riemann tensor. As there, I shall be examining a Leibniz operator Q of rank R and making use of a presumed local basis, b, of R along with its dual, a local basis p of dual(R).

Because Reimann(Q)'s rank is [R,R,R,dual(R)], whose last item is dual to each of the previous three, we have the option of applying trace; because the first three are all the same, we can apply various permutations. By construction, this tensor is antisymmetric under interchange of its first two components: this slightly reduces the collection of options to be tried. The last component may be contracted with either the first or the third; contracting it with the second would merely give -1 times the result of contracting with the first. The sum of these two contractions is the Ricci tensor given above.

First, observe the following sum of trace operators (presumed acting on rank [R,R,R,dual(R)]), composed after antiSym([R,R]):

2.(τ[*,0,1,*] + τ[0,1,*,*] + τ[1,*,0,*])&on;antiSym([R,R])
τ[*,0,1,*] + τ[0,1,*,*] + τ[1,*,0,*]
-τ[0,*,1,*] -τ[1,0,*,*] -τ[*,1,0,*]

Thus, (τ[*,0,1,*] + τ[0,1,*,*] + τ[1,*,0,*]) / 3 maps the Riemann tensor to

= sum(: (b(i)^b(j)^b(k)) × p(s) . (
+ sum(: (p(i)·Q(b(r))·p(j)).(p(r)·Q(b(s))·p(k)) + (p(i)·Q(b(r))·p(k)).(p(j)·Q(b(s))·p(r)) ←r :) ) ←[i,j,k,s] :)

but now each term is zero if every output of Q&on;b is symmetric: so this sum of traces of the Riemann tensor is zero in such cases.

Trace on two rightmost tensor factors

τ[0,1,*,*]&on;Riemann(Q) =
sum(: antiSym([R,R], Q(Q(b(s))))·p(s) ←s :)
= sum(: (b(i)^b(j)) . sum(:
+ sum(: (p(i)·Q(b(r))·p(j)).(p(r)·Q(b(s))·p(s)) + (p(i)·Q(b(r))·p(s)).(p(j)·Q(b(s))·p(r)) ←r :) ←s :) ←[i,j] :)
sum(: Q(p(j)·Q(b(s))·p(s))^b(j) ←[j,s] :)
+ sum(: (p(r)·Q(b(s))·p(s)).antiSym([R,R],Q(b(r))) ←[r,s] :)
+ sum(: (Q(b(r))·p(s))^(Q(b(s))·p(r)) ←[r,s] :)

Exchanging r and s in the last sum reveals that it is symmetric: but it is also antisymmetric, therefore zero. Now, the remaining two terms are seen in (for fixed i, j):

sum(: p(i)·Q(Q(b(s))·p(s))·p(j) ←s :) =
sum(: p(i)·Q((p(r)·Q(b(s))·p(s)).b(r))·p(j) ←[s,r] :)
sum(: p(i)·Q(p(j)·Q(b(s))·p(s)) ←s :)
+ sum(: (p(r)·Q(b(s))·p(s)).(p(i)·Q(b(r))·p(j)) ←[r,s] :)

so we are left with:

τ[0,1,*,*]&on;Riemann(Q) =
sum(: (b(i)^b(j)) . p(i)·Q(sum(: Q(b(s))·p(s) ←s :))·p(j) ←[i,j] :)
antiSym([R,R], Q(sum(: Q(b(s))·p(s) ←s :)))

Trace first with last tensor factors

= sum(: p(s)·antiSym([R,R], Q(Q(b(s)))) ←s :)

= sum(: p(s)·(b(i)^b(j)) × b(k) . (
+ sum(: (p(i)·Q(b(r))·p(j)).(p(r)·Q(b(s))·p(k)) + (p(i)·Q(b(r))·p(k)).(p(j)·Q(b(s))·p(r)) ←r :)
) ←[s,i,j,k] :)

expand p(s)·(b(i)^b(j)) as (when(s=i).b(j) - when(s=j).b(i))/2 to get

sum(: b(j) × b(k) . (
p(s)·Q(p(j)·Q(b(s))·p(k)) +
+ (p(s)·Q(b(r))·p(k)).(p(j)·Q(b(s))·p(r))
←r :)
) ←[j,k,s] :) / 2
- sum(: b(i) × b(k) . (
p(i)·Q(p(s)·Q(b(s))·p(k)) +
(p(i)·Q(b(r))·p(s)).(p(r)·Q(b(s))·p(k)) +
(p(i)·Q(b(r))·p(k)).(p(s)·Q(b(s))·p(r)) ←r :)
) ←[i,k,s] :) / 2

rename i and j as h, then shuffle

sum(: b(h)×b(k) . (
p(s)·Q(p(h)·Q(b(s))·p(k)) - p(h)·Q(p(s)·Q(b(s))·p(k)) +
(p(s)·Q(b(r))·p(h)).(p(r)·Q(b(s))·p(k)) - (p(h)·Q(b(r))·p(s)).(p(r)·Q(b(s))·p(k))
+ (p(s)·Q(b(r))·p(k)).(p(h)·Q(b(s))·p(r)) - (p(h)·Q(b(r))·p(k)).(p(s)·Q(b(s))·p(r))
←r :)
) ←[h,k,s] :) / 2
( sum(: b(h)×b(k) . p(s)·Q(p(h)·Q(b(s))·p(k)) ←[h,k,s] :)
- sum(: Q(p(s)·Q(b(s))·p(k)) × b(k) ←[s,k] :)
- sum(: Q(b(r)).(p(s)·Q(b(s))·p(r)) ←[r,s] :)
+ sum(: p(s).(Q(b(r)) - τ[1,0](Q(b(r)))) × p(r)·Q(b(s)) ←[r,s] :)
+ sum(: Q(b(s))·p(r) × p(s)·Q(b(r)) ←[r,s] :)
) / 2

( sum(: b(h)×b(k) . p(s)·Q(p(h)·Q(b(s))·p(k)) ←[h,k,s] :)
- sum(: Q(p(s)·Q(b(s))) ←s :)
+ sum(: p(s)·(Q(b(r)) - τ[1,0](Q(b(r)))) × p(r)·Q(b(s)) ←[r,s] :)
+ sum(: Q(b(s))·p(r)×p(s)·Q(b(r)) ←[s,r] :)
) / 2

(Note taht τ[1,0] is `transposition', reversing the components of Q(b(r)); so the term involving it is the antisymmetric part of Q(b(r)).) The last term here is trivially symmetric, in any case: in the case where each Q&on;b is symmetric, the first term is symmetric and so, trivially, is the term in Q(b(r))'s antisymmetric part (which is then zero). The remaining term's antisymmetric part is just precisely the other trace of the Riemann tensor (provided Q&on;b's values are symmetric). Consequently, the sum of these two traces is symmetric whenever a basis may be found whose image under Q is symmetric.

The sum is thus:

(τ[*,0,1,*] + τ[0,1,*,*])(Riemann(Q))
= sum(:
sum(: b(h)×b(k) . p(s)·Q(p(h)·Q(b(s))·p(k)) ←[h,k] :)
+ antiSym([R,R], Q(Q(b(s))·p(s))) - Q(p(s)·Q(b(s)))
+ p(s)·sum(: (Q(b(r)) - τ[1,0](Q(b(r))))×p(r) ←r :)·Q(b(s))
+ Q(b(s))·sum(: p(r)×p(s)·Q(b(r)) ←r :)
←s :)/2

In the standard Q&on;b-symmetric case, exploiting the result earlier involving antiSym([R,R,R])&on;Q&on;(:Q:R), the definition and this formula reduce to

sum(: b(h)×b(k) . p(s)·Q(p(h)·Q(b(s))·p(k)) ←[h,k,s] :)
+ sum(: p(r)·Q(b(s))×p(s)·Q(b(r)) ←[s,r] :)/2
- (τ[0,1] +τ[1,0])(sum(: Q(p(s)·Q(b(s))) ←s :))/2

which is symmetric; and orthodoxy would write it as

Special case, where Q annihilates g of rank [R,R]

When Q annihilates some given tensor field g of rank [R,R], we can obtain an explicit description of Q's Christoffel symbols, for any given basis b of R and dual basis p of dual(R). We are, furthermore, concerned with the case where g is symmetric and invertible (because this is the situation in general relativity, where Q is our differential operator and g is the metric of space-time); let ig be g's inverse. We also presume the existence of a basis b of R, in some neighbourhood of any given point on our manifold, for which Q&on;b's outputs are all symmetric tensors (they're of rank [R,R]). These presumptions give Q's actions on our basis in terms of its actions on the scalar fields which give g's co-ordinates on our basis as:

Q&on;b =
(: b(i)·ig·(
(1 -τ[1,0,2] -τ[2,1,0])(sum(:
Q(p(r)·g·p(s))×b(r)×b(s) ←[r,s] :)) )
←i :)

Right-factor trace revisited

This, in turn, gives us a tractable form for the first trace of the Riemann tensor analysed above (tracing out the two rightmost tensor factors):

= antiSym([R,R], Q(sum(: Q(b(i))·p(i) ←i :)))
= antiSym([R,R], Q(sum(: b(i)·ig· (1 -τ[1,0,2] -τ[2,1,0])( Q(p(r)·g·p(s))×b(r)×b(s)) ·p(i) ←[i,r,s] :))) /2
= antiSym([R,R], Q(sum(:
- b(i)·ig·b(r).Q(p(r)·g·p(s)).b(s)·p(i)
- b(i)·ig·b(s).b(r).Q(p(r)·g·p(s))·p(i)
←[i,r,s] :)) )/2
= antiSym([R,R], Q(sum(:
sum(: (b(i)·ig·Q(p(r)·g·p(i))).b(r) ←r :)
- sum(: (b(i)·ig·b(r)).Q(p(r)·g·p(i)) ←r :)
- sum(: (b(i)·ig·b(s)).b(r).p(i)·Q(p(r)·g·p(s)) ←[r,s] :)
←i :)) )/2

Change i to j in the first two terms, s to j in the last and notice that (b(i)·u).p(i) sums to u, here with u= ig·p(s)

= antiSym([R,R], Q(sum(:
sum(: (b(j)·ig·Q(p(r)·g·p(j))).b(r) ←r :)
- sum(: (b(j)·ig·b(r)).Q(p(r)·g·p(j)) ←r :)
- sum(: b(r). (b(j)·ig·Q(p(r)·g·p(j))) ←r :)
←j :)) )/2

In which the first and last terms multiply the same b(r) on left and right by the same scalar, but with a sign-change: and scalar multiplication is taken to be symmetric, so the two cancel.

= - antiSym([R,R], Q(sum(:
←[i,r] :)) )/2
= -sum(:
(b(i)·ig·b(r)). antiSym([R,R], Q(Q(p(r)·g·p(i))))
- Q(b(i)·ig·b(r)) ^ Q(p(r)·g·p(i))
←[i,r] :) / 2

In which, if Q is torsion-free, the first term vanishes. To make sense of the second term, first examine (for any given i, j)

0 = Q(b(i)·p(j))
= Q(b(i)·ig·g·p(j))
= Q(sum(: (b(i)·ig·b(k)).(p(k)·g·p(j)) ←k :))
sum(: Q(b(i)·ig·b(r)).(p(r)·g·p(j)) ←r :)
+ sum(: (b(i)·ig·b(k)).Q(p(k)·g·p(j)) ←k :)


= sum(: Q(b(i)·ig·b(k)) . (p(k)·g·p(j)) . (b(j) ig b(r)) ←[j,k] :)
= -sum(: (b(i)·ig·b(k)) . Q(p(k)·g·p(j)) . (b(j)·ig·b(r)) ←[j,k] :)

leading us to

= antiSym([R,R], Q(sum(: Q(b(i))·p(i) ←i :)))
= sum(:
(b(i)·ig·b(k)) . (b(j)·ig·b(r)) . Q(p(k)·g·p(j)) ^ Q(p(r)·g·p(i))
←[i,j,k,r] :) /2

This is manifestly antisymmetric: but swapping labels around and exploiting the symmetry (antisymmetry would do just as well) of g reveals that it is also symmetric, consequently zero. Thus the `rightmost factors' trace of the Riemann tensor is zero whenever Q annihilates some symmetric isomorphism from its rank's dual to its rank and delivers symmetric image on some basis (whence, as we are usually concerned with it only for the torsion-free differential operator which annihilates our metric, it is more usual to define the Ricci tensor as the `first and last' trace of the Riemann tensor: the other term is zero and so ignored).

Written by Eddy.
$Id: ricci.html,v 1.2 2001-10-31 17:36:56 eddy Exp $