8.2. Riemann expressions

As we said, there is no algorithm at present in xTensor` to canonicalize expressions with multiterm symmetries. That is an obstacle in GR when one wants to work with the Riemann tensor, which has a cyclic symmetry. A simple, brute-force, solution is to prepare a number of rules which are only valid for the Riemann tensor. We follow MathTensor's discussion of this point (see MathTensor book).
There are 48 rules in total, numbered from 1 to 40, some of them having subcases a, b, c, ...
14 of those rules are simple consequences of the monoterm symmetries of the Riemann tensor, and hence can be considered already implemented in ToCanonical:

RiemannRule1:

In[805]:=

RiemannCD[-a, a, -c, -d]//ToCanonical

Out[805]=

0

In[806]:=

RiemannCD[-a, -b, -c, c]//ToCanonical

Out[806]=

0

RiemannRule2:

In[807]:=

RiemannCD[-a, -b, a, -d]//ToCanonical

Out[807]=

R[▽] _bd^  

RiemannRule3:

In[808]:=

RiemannCD[-a, -b, -c, a]//ToCanonical

Out[808]=

-R[▽] _bc^  

RiemannRule4:

In[809]:=

RiemannCD[-a, -b, b, -d]//ToCanonical

Out[809]=

-R[▽] _ad^  

RiemannRule5:

In[810]:=

RiemannCD[-a, -b, -c, b]//ToCanonical

Out[810]=

R[▽] _ac^  

RiemannRule6:

In[811]:=

RiemannCD[-a, -b, -c, -d] RicciCD[a, b]//ToCanonical

Out[811]=

0

In[812]:=

RiemannCD[-a, -b, -c, -d] RicciCD[c, d]//ToCanonical

Out[812]=

0

RiemannRule31:

In[813]:=

CD[-e] @ RiemannCD[-a, -b, -c, -d] RicciCD[a, b]//ToCanonical

Out[813]=

0

In[814]:=

CD[-e] @ RiemannCD[-a, -b, -c, -d] RicciCD[c, d]//ToCanonical

Out[814]=

0

RiemannRule32:

In[815]:=

CD[-e] @ RiemannCD[-a, -b, -c, -d] CD[-f] @ RicciCD[a, b]//ToCanonical

Out[815]=

0

In[816]:=

CD[-e] @ RiemannCD[-a, -b, -c, -d] CD[-f] @ RicciCD[c, d]//ToCanonical

Out[816]=

0

RiemannRule33:

In[817]:=

CD[-c] @ RicciCD[-a, -b] RiemannCD[a, b, d, e]//ToCanonical

Out[817]=

0

In[818]:=

CD[-c] @ RicciCD[-a, -b] RiemannCD[d, e, a, b]//ToCanonical

Out[818]=

0

There are 2 more rules which can be obtained from the fact that the Einstein tensor is divergence free:

RiemannRule16:

In[819]:=

CD[b][RicciCD[-a, -b]]//RicciToEinstein//ContractMetric

Out[819]=

1/2 (▽_a^ R[▽] _^)

RiemannRule17:

In[820]:=

CD[a][RicciCD[-a, -b]]//RicciToEinstein//ContractMetric

Out[820]=

1/2 (▽_b^ R[▽] _^)

The other 32 rules are actual consequences of the cyclic symmetry of the Riemann tensor, and therefore must be programmed independently. Using MakeRule we can avoid typing equivalent rules (up to permutations of indices), reducing the number to 17 independent rules.
We first study 13 rules having derivatives of a single curvature tensor on the LHS. They are in fact only 6 independent rules:
    RuleDivRiemann
    RuleDivGradRicci
    RuleBoxRiemann
    RuleDivGradRiemann
    RuleD4RicciScalar
    RuleD4Ricci

The four rules 20--23 are all the same:

In[821]:=

RuleDivRiemann = MakeRule[{CD[a] @ RiemannCD[-a, -b, -c, -d], -CD[-d] @ RicciCD[-b, -c] + CD[-c] @ RicciCD[-b, -d]}, UseSymmetries→True, MetricOn→All] ;

RiemannRule20:

In[822]:=

CD[a] @ RiemannCD[-a, -b, -c, -d]/.RuleDivRiemann

Out[822]=

▽_c^ R[▽] _bd^   - ▽_d^ R[▽] _bc^  

RiemannRule21:

In[823]:=

CD[b] @ RiemannCD[-a, -b, -c, -d]/.RuleDivRiemann

Out[823]=

-(▽_c^ R[▽] _ad^  ) + ▽_d^ R[▽] _ac^  

RiemannRule22:

In[824]:=

CD[c] @ RiemannCD[-a, -b, -c, -d]/.RuleDivRiemann

Out[824]=

▽_a^ R[▽] _db^   - ▽_b^ R[▽] _da^  

RiemannRule23:

In[825]:=

CD[d] @ RiemannCD[-a, -b, -c, -d]/.RuleDivRiemann

Out[825]=

-(▽_a^ R[▽] _cb^  ) + ▽_b^ R[▽] _ca^  

Two rules with second derivatives of Ricci can be combined in a single rule:

In[826]:=

RiemannRule18:

In[827]:=

CD[b] @ CD[-c] @ RicciCD[-a, -b]/.RuleDivGradRicci

Out[827]=

R[▽] _ba^   R[▽] _c ^( b) - R[▽] _bd^   R[▽] _ (a c )^( d b) + 1/2 (▽_c^ ▽_a^ R[▽] _^)

RiemannRule19:

In[828]:=

CD[a] @ CD[-c] @ RicciCD[-a, -b]/.RuleDivGradRicci

Out[828]=

R[▽] _ab^   R[▽] _c ^( a) - R[▽] _ad^   R[▽] _ (b c )^( d a) + 1/2 (▽_c^ ▽_b^ R[▽] _^)

Rules 26 to 30 are now two rules in xTensor`:

In[829]:=

In[830]:=

RiemannRule26:

In[831]:=

CD[e] @ CD[-e] @ RiemannCD[-a, -b, -c, -d]/.RuleBoxRiemann

Out[831]=

RiemannRule27:

In[832]:=

CD[a] @ CD[-e] @ RiemannCD[-a, -b, -c, -d]/.RuleDivGradRiemann

Out[832]=

RiemannRule28:

In[833]:=

CD[b] @ CD[-e] @ RiemannCD[-a, -b, -c, -d]/.RuleDivGradRiemann

Out[833]=

RiemannRule29:

In[834]:=

CD[c] @ CD[-e] @ RiemannCD[-a, -b, -c, -d]/.RuleDivGradRiemann

Out[834]=

RiemannRule30:

In[835]:=

CD[d] @ CD[-e] @ RiemannCD[-a, -b, -c, -d]/.RuleDivGradRiemann

Out[835]=

Fourth derivative of the Ricci scalar: conversion to Box^2:

In[836]:=

RiemannRule24:

In[837]:=

CD[b] @ CD[a] @ CD[-b] @ CD[-a] @ RicciScalarCD[]/.RuleD4RicciScalar

Out[837]=

1/2 (▽_a^ R[▽] _^) (▽_ ^aR[▽] _^) + R[▽] _  ^ab (▽_b^ ▽_a^ R[▽] _^) + ▽_ ^b▽_b^ ▽_ ^a▽_a^ R[▽] _^

Fourth derivative of the Ricci tensor:

In[838]:=

RiemannRule25:

In[839]:=

CD[b] @ CD[a] @ CD[c] @ CD[-c] @ RicciCD[-a, -b]/.RuleD4Ricci

Out[839]=

Now we study six rules with products of two Riemann tensors on the LHS. There are only two different rules, depending on whether there are two or three contracted indices:
    RuleTwoRiemann3
    RuleTwoRiemann2

These are the independent rules:

In[840]:=

RuleTwoRiemann3 = MakeRule[{RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, b, c], -1/2RiemannCD[-f, -d, -g, -h] RiemannCD[-e, f, g, h]}, UseSymmetries→True, MetricOn→All] ;

In[841]:=

RuleTwoRiemann2 = MakeRule[{RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, -g, b], 1/2RiemannCD[-f, -h, -c, -d] RiemannCD[-e, -g, f, h]}, UseSymmetries→True, MetricOn→All] ;

RiemannRule7:

In[842]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, b, c]/.RuleTwoRiemann3

Out[842]=

-1/2 R[▽] _adbc^     R[▽] _e   ^( abc)

RiemannRule8:

In[843]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[a, c, b, h]/.RuleTwoRiemann3

Out[843]=

-1/2 g_  ^he R[▽] _adbc^     R[▽] _e   ^( abc)

RiemannRule9a:

In[844]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, -g, b]/.RuleTwoRiemann2

Out[844]=

1/2 R[▽] _abcd^     R[▽] _eg  ^(  ab)

RiemannRule9b:

In[845]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[e, a, b, h]/.RuleTwoRiemann2

Out[845]=

-1/2 g_  ^ef g_  ^hg R[▽] _abcd^     R[▽] _fg  ^(  ab)

RiemannRule9c:

In[846]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[a, f, b, h]/.RuleTwoRiemann2

Out[846]=

1/2 g_  ^fe g_  ^hg R[▽] _abcd^     R[▽] _eg  ^(  ab)

RiemannRule9d:

In[847]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[a, f, g, b]/.RuleTwoRiemann2

Out[847]=

-1/2 g_  ^fe g_  ^gh R[▽] _abcd^     R[▽] _eh  ^(  ab)

There are seven more rules involving two curvature tensors and derivatives, corresponding to five independent rules:
    RuleD01TwoRiemann
    RuleD11TwoRiemann
    RuleD2RicciRiemann
    RuleD2RicciDRiemann
    RuleD11bisTwoRiemann

In[848]:=

In[849]:=

In[850]:=

In[851]:=

This rule has a typo in MathTensor's book. I assume the index c on the RHS is actually f:

In[852]:=

RiemannRule34:

In[853]:=

CD[-e] @ RiemannCD[a, f, b, c] RiemannCD[-a, -b, -c, -d]/.RuleD01TwoRiemann

Out[853]=

-1/2 R[▽] _adbc^     (▽_e^ R[▽] _    ^afbc)

RiemannRule35:

In[854]:=

CD[-e] @ RiemannCD[-a, -b, -c, -d] CD[-f] @ RiemannCD[a, g, b, c]/.RuleD11TwoRiemann

Out[854]=

-1/2 (▽_e^ R[▽] _adbc^    ) (▽_f^ R[▽] _    ^agbc)

RiemannRule36:

In[855]:=

CD[-e] @ RiemannCD[a, c, b, f] RiemannCD[-a, -b, -c, -d]/.RuleD01TwoRiemann

Out[855]=

1/2 R[▽] _adbc^     (▽_e^ R[▽] _    ^afbc)

RiemannRule37:

In[856]:=

CD[-e] @ RiemannCD[-a, -b, -c, -d] CD[-f] @ RiemannCD[a, c, b, g]/.RuleD11TwoRiemann

Out[856]=

1/2 (▽_e^ R[▽] _adbc^    ) (▽_f^ R[▽] _    ^agbc)

RiemannRule38:

In[857]:=

CD[-g] @ RiemannCD[-a, -b, -c, -d] CD[g] @ RiemannCD[c, e, d, f]/.RuleD11bisTwoRiemann

Out[857]=

1/2 (▽_g^ R[▽] _cdab^    ) (▽_ ^gR[▽] _    ^cdfe)

RiemannRule39:

In[858]:=

CD[-e] @ RiemannCD[a, d, b, c] CD[-d] @ CD[-c] @ RicciCD[-a, -b]/.RuleD2RicciDRiemann

Out[858]=

(▽_d^ ▽_b^ R[▽] _ac^  ) (▽_e^ R[▽] _    ^abcd)

RiemannRule40:

In[859]:=

CD[-d] @ CD[-c] @ RicciCD[-a, -b] RiemannCD[a, d, b, c]/.RuleD2RicciRiemann

Out[859]=

R[▽] _    ^acbd (▽_d^ ▽_c^ R[▽] _ab^  )

Finally we study six rules with products of three curvature tensors, only four of which are independent:
    RuleRicciTwoRiemann
    RuleThreeRiemann
    RuleThreeRiemannB
    RuleThreeRiemannC

Constructing the independent rules takes rather long because there are lots of equivalent cases:

In[860]:=

Out[860]=

{12.024198 Second, 4096}

In[861]:=

Out[861]=

{122.842100 Second, 32768}

In[862]:=

Out[862]=

{122.398527 Second, 32768}

In[863]:=

Out[863]=

{200.198221 Second, 32768}

RiemannRule10:

In[864]:=

RicciCD[-a, -b] RiemannCD[-c, -d, -e, a] RiemannCD[b, c, d, e]/.RuleRicciTwoRiemann

Out[864]=

-1/2 R[▽] _ab^   R[▽] _    ^becd R[▽] _cde ^(   a)

RiemannRule11:

In[865]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[-e, -f, a, b] RiemannCD[c, e, d, f]/.RuleThreeRiemann

Out[865]=

1/2 R[▽] _abcd^     R[▽] _    ^cdef R[▽] _ef  ^(  ab)

RiemannRule12:

In[866]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, -f, b] RiemannCD[c, e, d, f]/.RuleThreeRiemannB

Out[866]=

1/4 R[▽] _abcd^     R[▽] _    ^abef R[▽] _ef  ^(  cd)

RiemannRule13:

In[867]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, -f, b] RiemannCD[c, d, e, f]/.RuleThreeRiemann

Out[867]=

1/2 R[▽] _abcd^     R[▽] _    ^cdef R[▽] _ef  ^(  ab)

RiemannRule14:

In[868]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, -f, c] RiemannCD[b, d, e, f]/.RuleThreeRiemannB

Out[868]=

1/4 R[▽] _abcd^     R[▽] _    ^abef R[▽] _ef  ^(  cd)

RiemannRule15:

In[869]:=

RiemannCD[-a, -b, -c, -d] RiemannCD[-e, a, -f, c] RiemannCD[b, f, d, e]/.RuleThreeRiemannC

Out[869]=


Created by Mathematica  (May 16, 2008) Valid XHTML 1.1!