3. Canonical invariants

RInv                Non-dual invariant
DualRInv            Dual invariant
RInvs                
List of all non-dual invariants after a given step
DualRInvs            List of all dual invariants after a given step
MaxIndex            Maximum value of the index for the list of non-dual invariant after a given step
MaxDualIndex        Maximum value of the index for the list of dual invariants after a given step
RInvRules            List of all independent invariants for a given step and case
RemoveRInvRules        Remove rules for invariants of a given step and case

Canonical invariants

For a given case {λ_1, ..., λ_n}, there will be N! different monomials, where N = 4n +Underoverscript[∑, i = 1, arg3] λ_i, as we saw in the previous section. It is obviously impossible to store them all.

Consider, for example, the numbers of possible permutations taking into acount only algebraic invariants, for wich the number of indices is N = 4n:

In[54]:=

TableForm[Table[{n, (4n) !, N[(4n) !]}, {n, 7}], TableHeadings→ {None, {"degree", "number of monomials"}}]

Out[54]//TableForm=

degree number of monomials
1 24 24.
2 40320 40320.
3 479001600 4.79002*10^^8
4 20922789888000 2.09228*10^^13
5 2432902008176640000 2.4329*10^^18
6 620448401733239439360000 6.20448*10^^23
7 304888344611713860501504000000 3.04888*10^^29

We can, however, store the corresponding canonical invariants with respect to permutation symmetries. The numbers of canonical invariants for each case are stored in the functions MaxIndex and MaxDualIndex,

In[55]:=

MaxIndex[{0, 2, 2}]

Out[55]=

1622

For example, the values up to order 10 are

In[56]:=

MatrixForm[{InvarCases[][[Range[26]]], MaxIndex/@InvarCases[][[Range[26]]]}//Transpose]

Out[56]//MatrixForm=

In[57]:=

MaxDualIndex/@InvarDualCases[]

Out[57]=

{1, 4, 3, 27, 58, 36, 32, 232, 967, 1047, 876, 920, 478, 435, 2582}

In[58]:=

Array[MaxDualIndex, {5}]

Out[58]=

{1, 4, 27, 232, 2582}

Within each case, the canonical invariants are labeled (Dual)RInv[metric][case, index], where index is an integer ranging from 1 to Max(Dual)Index[case]. Non dual invariants are output as I_ (case, index), where case, for brevity and clarity, is not the list {λ_1, ..., λ_n}, but simply the concatenation of its elements λ_1λ_2...λ_n. Notice that there is no confusion because the λ_iare always single digit integers, except for the case {10}, but even then there is no problem, because we always write the λ_i in increasing order. Dual invariants are represented by D_ (case, index).

Examples:

In[59]:=

RInv[metric][{10}, 100] + RInv[metric][{0, 1, 3}, 1]

Out[59]=

I_10,100 + I_013,1

In[60]:=

RInv[metric][{0, 1, 2}, 12] - DualRInv[metric][{0, 0, 0}, 1]

Out[60]=

-D_000,1 + I_012,12

As we apply more symmetries, the lists of independent (Dual)RInvs get smaller. We can produce the independent invariant at each simplification step with the command (Dual)RInvs[metric][step, case]. The first step produces a list of length MaxIndex[case]

In[61]:=

RInvs[metric][1, {2, 2}]

Out[61]=

In[62]:=

RInv[metric][{2}, #] &/@Range[MaxIndex[{2, 2}]]

Out[62]=

After applying the cyclic identity we get

In[63]:=

RInvs[metric][2, {2, 2}]

Reading InvRules for step 2 and case  {2, 2}

Out[63]=

After the Bianchi identity

In[64]:=

RInvs[metric][3, {2, 2}]

Reading InvRules for step 3 and case  {2, 2}

Out[64]=

After reordering derivatives

In[65]:=

RInvs[metric][4, {2, 2}]

Reading InvRules for step 4 and case  {2, 2}

Out[65]=

{I_22,1, I_22,3, I_22,8, I_22,17, I_22,19, I_22,22, I_22,73}

After the dimensionally dependent identities

In[66]:=

RInvs[metric][5, {2, 2}]

Reading InvRules for step 5, case  {2, 2}  and dimension 4

Out[66]=

{I_22,1, I_22,3, I_22,8, I_22,17, I_22,19, I_22,22, I_22,73}

In this case there are no signature dependent relations (= relations arising from products of dual invariants)

In[67]:=

RInvs[metric][6, {2, 2}]

Reading InvRules for step 6, case  {2, 2}  and dimension 4

Out[67]=

{I_22,1, I_22,3, I_22,8, I_22,17, I_22,19, I_22,22, I_22,73}

The following table reproduces the one in the paper listing the numbers of invariants after each step for all cases up to order 10

In[68]:=

Table[Length[RInvs[step, InvarCases[][[case]]]], {step, 6}, {case, 26}] ;

In[69]:=

Transpose[Join[{InvarCases[][[Range[26]]]}, %]]//MatrixForm

Out[69]//MatrixForm=

The simplified notation RInvs[metric][step, n] is automatically translated into RInvs[metric][step, {0, Overscript[..., n], 0}], for backwards compatibility with Invar 1.  For instance, these are all the algebraic invariants after step 3 with degree 6 (case {0,0,0,0,0,0}):

In[70]:=

RInvs[metric][3, 6]

Reading InvRules for step 2 and case  {0, 0, 0, 0, 0, 0}

Reading InvRules for step 3 and case  {0, 0, 0, 0, 0, 0}

Out[70]=

Similar shorthands are available for other commands, such as MaxIndex or RInv

In[71]:=

{MaxIndex[7], MaxIndex[{0, 0, 0, 0, 0, 0, 0}]}

Out[71]=

{16532, 16532}

In[72]:=

RInv[metric][4, 1]

Out[72]=

I_0000,1

In[73]:=

DualRInvs[2, 4]

Reading DualInvRules for step 2 and case  {0, 0, 0, 0}

Out[73]=

If we restrict ourselves to algebraic invariants we can give a basis of only 25 invariants (notice that there is no step 6 for dual invariants)

In[74]:=

Flatten[Join[RInvs[metric][6, #] &/@Range[7], DualRInvs[metric][5, #] &/@Range[5]]]

Reading InvRules for step 4 and case  {0, 0, 0, 0, 0, 0}

Reading InvRules for step 5, case  {0, 0, 0, 0, 0, 0}  and dimension 4

Reading InvRules for step 6, case  {0, 0, 0, 0, 0, 0}  and dimension 4

Reading InvRules for step 2 and case  {0, 0, 0, 0, 0, 0, 0}

Reading InvRules for step 3 and case  {0, 0, 0, 0, 0, 0, 0}

Reading InvRules for step 4 and case  {0, 0, 0, 0, 0, 0, 0}

Reading InvRules for step 5, case  {0, 0, 0, 0, 0, 0, 0}  and dimension 4

Reading InvRules for step 6, case  {0, 0, 0, 0, 0, 0, 0}  and dimension 4

Reading DualInvRules for step 2 and case  {0}

Reading DualInvRules for step 3 and case  {0}

Reading DualInvRules for step 4 and case  {0}

Reading DualInvRules for step 5 and case  {0}

Reading DualInvRules for step 2 and case  {0, 0, 0}

Reading DualInvRules for step 3 and case  {0, 0, 0}

Reading DualInvRules for step 4 and case  {0, 0, 0}

Reading DualInvRules for step 5 and case  {0, 0, 0}

Reading DualInvRules for step 3 and case  {0, 0, 0, 0}

Reading DualInvRules for step 4 and case  {0, 0, 0, 0}

Reading DualInvRules for step 5 and case  {0, 0, 0, 0}

Out[74]=

In[75]:=

Transpose[{%, InvToRiemann[%, False]}]//TableForm

Reading InvRules for step 1 and case  {0, 0, 0, 0, 0}

Reading InvRules for step 1 and case  {0, 0, 0, 0, 0, 0}

Reading InvRules for step 1 and case  {0, 0, 0, 0, 0, 0, 0}

Reading DualInvRules for step 1 and case  {0, 0, 0}

Reading DualInvRules for step 1 and case  {0, 0, 0, 0}

Out[75]//TableForm=

I_0,1 Scalar[R_ (  ab)^ab  ]
I_00,1 Scalar[R_ (  a )^(ab c) R_ (b cd)^( d  )]
I_00,2 Scalar[R_abcd^     R_    ^abcd]
I_000,1 Scalar[R_ (  a )^(ab c) R_ (b d )^( d e) R_ (c ef)^( f  )]
I_000,2 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_ (d ef)^( f  )]
I_000,5 Scalar[R_ab  ^(  ef) R_    ^abcd R_cdef^    ]
I_0000,1 Scalar[R_ (  a )^(ab c) R_ (b d )^( d e) R_ (c f )^( f g) R_ (e gh)^( h  )]
I_0000,5 Scalar[R_ (  a )^(ab c) R_b   ^( def) R_ (c ef)^( g  ) R_ (d gh)^( h  )]
I_0000,7 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_ (d e )^( f g) R_ (f gh)^( h  )]
I_00000,2 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_ (d f )^( f g) R_ (e h )^( h i) R_ (g ij)^( j  )]
I_00000,8 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_ (d e )^( f g) R_ (f h )^( h i) R_ (g ij)^( j  )]
I_00000,33 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_d   ^( fgh) R_ (e gh)^( i  ) R_ (f ij)^( j  )]
I_000000,6 Scalar[R_ (  a )^(ab c) R_ (b d )^( d e) R_ (c f )^( f g) R_e   ^( hij) R_ (g ij)^( k  ) R_ (h kl)^( l  )]
I_000000,8 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_ (d e )^( f g) R_ (f h )^( h i) R_ (g j )^( j k) R_ (i kl)^( l  )]
I_000000,47 Scalar[R_ (  a )^(ab c) R_ (b d )^( d e) R_ (c e )^( f g) R_f   ^( hij) R_ (g ij)^( k  ) R_ (h kl)^( l  )]
I_000000,242 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_d   ^( fgh) R_ (e gh)^( i  ) R_ (f i )^( j k) R_ (j kl)^( l  )]
I_0000000,14 Scalar[R_ (  a )^(ab c) R_ (b d )^( d e) R_ (c e )^( f g) R_ (f g )^( h i) R_ (h j )^( j k) R_ (i l )^( l m) R_ (k mn)^( n  )]
I_0000000,55 Scalar[R_ (  a )^(ab c) R_ (b d )^( d e) R_ (c f )^( f g) R_ (e g )^( h i) R_h   ^( jkl) R_ (i kl)^( m  ) R_ (j mn)^( n  )]
I_0000000,391 Scalar[R_ (  a )^(ab c) R_ (b c )^( d e) R_d   ^( fgh) R_ (e gh)^( i  ) R_ (f i )^( j k) R_ (j l )^( l m) R_ (k mn)^( n  )]
D_00,2 Scalar[ε_cdef^     R_ab  ^(  ef) R_    ^abcd]
D_000,2 Scalar[ε_cefh^     R_ (  a )^(ab c) R_b   ^( def) R_ (d g )^( g h)]
D_000,13 Scalar[ε_efgh^     R_ab  ^(  ef) R_    ^abcd R_cd  ^(  gh)]
D_0000,7 Scalar[ε_eghj^     R_ (  a )^(ab c) R_ (b c )^( d e) R_d   ^( fgh) R_ (f i )^( i j)]
D_00000,2 Scalar[ε_gijl^     R_ (  a )^(ab c) R_ (b d )^( d e) R_ (c f )^( f g) R_e   ^( hij) R_ (h k )^( k l)]
D_00000,76 Scalar[ε_gijl^     R_ (  a )^(ab c) R_ (b c )^( d e) R_ (d e )^( f g) R_f   ^( hij) R_ (h k )^( k l)]

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