Hey Jose, thanks for your speedy answer.
I had also considered this method, but the problem is that for the way I actually derive the quantities that I want to evaluate, this method is not so feasible I feel. In particular I need to find a Taylor expansion (in some coordinate system) of geodesic distances (denoted by \sigma) to 6th order. In order to calculate these quantities I first need covariant derivatives of this geodesic distances in a coincidence limit, which can be derived from a differential equation defining the geodesic distance.
I currently do this in the way described below (here I give the third order term, the sixth order is just repeating the same idea, though I should mention that the problematic terms for ToValues only start appearing at 5th order). The main problem is that when replacing CD by a precalculated levi civita connection as you suggest, block 5 of the calculations below already slows down a lot, let alone if I need to take even more derivatives to go to 6th order. Also, I'm not so sure if your suggestions jives very well with the rules I use here. I will try to make it work, but if you have any suggestions on how to sort these issues out, the are very welcome.
Many thanks for your time,
Daan
---
(*\[Sigma] denotes half the geodesic distance, i.e. the Synge world function (say from some fixed point p)*)
DefTensor[\[Sigma][], M]
(*CD[-a][\[Sigma]]=0 at point p (lowest order contribution in covariant Taylor series is quadratic)*)
\[Sigma]c1rule =
MakeRule[{CD[-a][\[Sigma][]],0},
MetricOn -> {a, b}, ContractMetrics -> True][[1]]
(*CD[-a][CD[-b][\[Sigma][]]]=metric[-a,-b] at point p*)
\[Sigma]c2rule =
MakeRule[{CD[-a][CD[-b][\[Sigma][]]], metric[-a, -b]},
MetricOn -> {a, b}, ContractMetrics -> True][[1]]
(*Calculate CD[-c][CD[-b][CD[-a][\[Sigma][]]]] at point p from diff. eq. 2\[Sigma][]==metric[a,b]CD[-a][\[Sigma][]]CD[-b][\[Sigma][]]*)
(*Define placeholder for bookkeeping*)
DefTensor[\[Sigma]c3[-a, -b, -c], M]
(*Take three derivatives of defining diff eq*)
0 == Module[{a, b, c, e, f}, CD[-c][CD[-b][CD[-a][metric[e, f] CD[-e][\[Sigma][]] CD[-f][\[Sigma][]]/2 - \[Sigma][]]]]] // SortCovDs
(*Apply rules CD[-a][CD[-b][\[Sigma][]]]=metric[-a,-b] and CD[-a][\[Sigma]]=0 while CD[-c][CD[-b][CD[-a][\[Sigma][]]]] remains untouched*)
\[Sigma]3expr = % /. MakeRule[{CD[-c][CD[-b][CD[-a][\[Sigma][]]]], \[Sigma]c3[-a, -b, -c]}, MetricOn -> {a, b, c}, ContractMetrics -> True] /. \[Sigma]c2rule /. \[Sigma]c1rule /. MakeRule[{\[Sigma]c3[-a, -b, -c], CD[-c][CD[-b][CD[-a][\[Sigma][]]]]}, MetricOn -> {a, b, c}, ContractMetrics -> True] // Simplification // SortCovDs
(*Solve for CD[-c][CD[-b][CD[-a][\[Sigma][]]]] at p*)
\[Sigma]c3rule = SolveTensors[\[Sigma]3expr, CD[-c_][CD[-b_][CD[-a_][\[Sigma][]]]]][[1]][[1]]