Hi Kasper,
You're right that my use-cases are not general for multiple vector bundle. I currently focus on 3+1 foliation of spacetime, where the normal space is 1D.
Here's an example of calculations for 3+1 foliation, and perhaps you can tell me what I'm missing.
A foliation is defined by a normal vector field n^{\mu}
The extrinsic curvature tensor B_{\mu \nu}
is a symmetric tensor. Also, its contraction with a n^{\mu}
(in either of its indices) would vanish.
I wrote the following code in Cadabra:
{x#}::Coordinate;
{\mu,\nu,\rho,\sigma,\kappa,\eta,\xi,\zeta,\alpha,\beta}::Indices(position=fixed,values=[x0,x1,x2,x3]);
{n^{\mu}}::Depends(x0,x1,x2,x3);
cond_normal1 := n^{\mu} n{\mu} -> (-1);
cond_normal2 := n^{\mu}
\nabla{\kappa}{n_{\mu}} -> 0;
cond_normal3 := n{\mu}
\nabla_{\kappa}{n^{\mu}} -> 0;
B_{\mu \nu}::Symmetric;
cond_B_normal1 := B{\mu \nu} n^{\mu} -> 0;
cond_B_normal2 := B{\mu \nu} n^{\nu} -> 0;
The reason I need both cond_B_normal_1 & cond_B_normal_2 is that the Symmetric property isn't enough to make the following expression vanish ( I add another general vector v
)
expr := B_{\mu \nu} v^{\mu} n^{\nu};
substitute(expr,cond_B_normal_1);
I have to run substitute(expr,cond_B_normal_2);
to make the contraction vanish.
Later I found that I have to also write the more substitution rules to account for other possible contractions:
cond_B_normal_3 := B^{\mu \nu} n_{\mu} -> 0;
cond_B_normal_4 := B^{\mu \nu} n_{\nu} -> 0;
cond_B_normal_5 := B_{\mu}^{\nu} n^{\mu} -> 0;
cond_B_normal_6 := B_{\mu}^{\nu} n_{\nu} -> 0;