Okay so this is bothering me for quite a while now, I am self studying General Relativity with Wald for a thesis (Yes, I am a 3rd year Undergrad student and yes I have the prerequisites)

I am really confused when Wald uses the Abstract index notation, I am using many resources while reading doing the topic.

So the question is, Wald uses the abstract index notation like $$ \nabla_at^b=\partial_at^b+\Gamma^b_{ac}t^c $$

And Hobson uses (He actually uses the same abc but they are components so I am using ijk) $$ \nabla_it^j=\partial_it^j+\Gamma^j_{ik}t^k $$

So am I right if I interpret the 1st equation in components as: $$ \nabla_a t^b = (\partial_\alpha t^\beta+\Gamma^\beta_{\alpha\gamma}t^\gamma)(\boldsymbol{e}^\alpha)_a(\boldsymbol{e}_\beta)^b $$

Where I can interpret the basis vectors e's as $$ (\boldsymbol{e}^\alpha)_a = (dx^\alpha)_a $$ $$ (\boldsymbol{e}_\beta)^b = (\partial_\beta)^b $$

Is this correct? If someone can elaborately explain the abstract index notation? And how should I exactly try to interpret the basis vectors, especially the 2nd one as the 1st one is defined using that to get a kroneker delta

  • $\begingroup$ Abstract index notation reduces to the usual notation if the identifications are done right. Essentially, the two notations are the same. It's probably best to first understand how this works for tensor products of vector spaces and their duals, and then to do it for the tensor products of the tangent bundle and it's dual for some manifold. It's here that contact is made with the usual notation. $\endgroup$ Commented Jan 19, 2018 at 2:56
  • $\begingroup$ I am actually looking for a more mathematical expression based answer! What you stated are facts, I was looking for an explanation! Thanks though! $\endgroup$ Commented Jan 19, 2018 at 6:58
  • $\begingroup$ sure, that's why it's just a comment rather than an answer! I think I once wrote a detailed explanation on tensor notation, I'll see if I can dig it up. $\endgroup$ Commented Jan 19, 2018 at 8:34
  • $\begingroup$ @MoziburUllah, Maybe my answer to a question about basis vectors and basis dual vectors can help. Here the link: physics.stackexchange.com/questions/379651/… $\endgroup$ Commented Jan 19, 2018 at 16:40
  • $\begingroup$ @Feynstein: I'm glad you found your answer! I just want to point out that comment boxes are for comments, not answers; answers go in the big box below. I knew that my comment wasn't what you were looking for. I wrote what I did because I once thought abstract indexes were something novel until I realised that they were pretty much the same thing once a basis was chosen. $\endgroup$ Commented Jan 20, 2018 at 1:41

3 Answers 3


So Wald starts with Greek indices for components and then progresses to Latin "abstract indexes" and I think you are confused because this makes it unclear what exactly they "mean". I have already typed out the "bigger picture" in a few answers here but it doesn't hurt to go through it again.

The idea is to pass to a notion of geometry which doesn't have coordinates. Let's see how that goes.

Happy little scalars

You are doing differential geometry. This means that you have a space of points $\mathcal M$ that will satisfy a bunch of axioms such that we will call it a manifold. In fact the nature of the points themselves is totally arbitrary, it could be a set of anything, and instead we get its manifold structure from some set of nice "scalar fields" $\mathcal S \subset (\mathcal M \to \mathbb R).$ So to be a manifold we must also specify $\mathcal S.$

So for example to define a 2-sphere we might take $\mathcal M=\{(x, y, z)\in \mathbb R^3: x^2 + y^2 + z^2 = 1\},$ and the nice scalar fields would probably be the smooth functions from $\mathbb R^3$ to $\mathbb R$, which we write $C^\infty(\mathbb R^3, \mathbb R).$

And what do I mean by "nice"? Well let me start with a slightly easier term, "pointwise." Given a function $\mathbb R^n\to\mathbb R$ we can apply it pointwise to get a function $\mathcal S^n\to\mathcal S.$ We do this by defining that the resulting scalar field acts on some point $p$ via,$$f[s_1,\dots s_n](p) = f\big(s_1(p),\dots s_n(p)\big),$$ feeding that point to all of the scalar fields in parallel and then combining their outputs with $f$. As you can see, I use square brackets to apply a function to a bunch of scalar fields pointwise and parentheses to apply it to real numbers. Now "nice" means that $\mathcal S$ must be closed under all smooth functions $C^\infty(\mathbb R^n \to \mathbb R)$ applied pointwise. So if you've got a nice scalar field $s$ then $\tanh[s]$ is also nice. If you've got two nice scalar fields $x,y$ then $x\cdot y$ and $x + y$ and $x - y$ are all nice, as are the constant fields.

One candidate for $\mathcal S$ would be all functions $\mathcal S = (\mathcal M \to \mathbb R),$ but this is a bad idea. The set $\mathcal S$ also defines our topology on $\mathcal M$, our sense of what points are connected to other points, by defining "a set is closed when it is the kernel of a nice scalar field -- that is, when there is a scalar field that maps that set, and only that set, to 0." But $\mathcal M\to\mathbb R$ would induce the discrete topology where every point is disconnected from every other. So for example on the sphere $r$ is a nice scalar field (because it is a constant), the polar angle $\phi$ is a nice scalar field, but the azimuthal angle $\theta$ is not nice unless you want to use a topology that's different from the one induced by open balls in $\mathbb R^3.$ The problem is that the scalar field $\theta$ abruptly changes from $2\pi - \epsilon$ to $0$ and thus would cause lines of longitude to be disconnected from the ones right next to them and stuff.

I will take for granted the words "nice" and "fields" and call nice scalar fields "scalars".


We then add a lot of axioms to this picture. For example to outlaw the discrete topology a good axiom is *under the kernel-closed-set topology of $\mathcal S$, the space is a connected space." But one of the most important is to say that the space is $D$-dimensional: around any point in $\mathcal M$ there is a neighborhood and a set of $D$ scalars $c_{1,\dots D}$ that we call coordinates around that point, such that if any two points in that neighborhood are different then at least one coordinate witnesses that difference by outputting a different real number for the two, and such that any other scalar can be written as a $C^\infty$ function applied pointwise to the coordinates, $s = \sigma[c_1,\dots c_D].$

So for example if we're doing the 2-sphere then $C^\infty$ allows the "bump functions" and applying one to the nice field $z$ (remember this is a space of triples of numbers which square-sum to 1; the extractors for the first, second and third of those numbers are bona-fide scalar fields $x, y, z$) can give us the lower hemisphere (including the equator) as a closed set, so the upper hemisphere (not including the equator) is an open set which can be taken as a neighborhood of any point in that hemisphere not on the equator. Two coordinates which work for that space are the scalars $x, y$. They do not work for the whole space at once; you would have to handle the lower hemisphere with $x, y$ separately and then the equator you would have to handle with either $x, z$ or $y, z$. But they work "locally" to a point which is all they need to do.

And there are axioms like "if you can figure out a scalar's values consistently in a patchwork of coordinate fields covering the whole space, then that scalar must exist, too" which are not super-important. Similarly there's the quirk that $\mathcal S$ is not a "field" because it has divisors of 0: the $0$-scalar may occasionally be formed as the product of two other scalars, one of which is zero on one set, the other of which is zero on some other set, and so they multiply to form a zero on the whole set.

Happy little vectors

You then need to have vector fields defined without reference to these coordinates. That is not too hard: we do it by looking for the directional derivatives to be our vector fields. Let's specify what this means. The nice vector fields (hereafter "vectors") are the maps $\mathcal V \subset (\mathcal S \to \mathcal S)$ which are Leibniz-linear. Let me denote for a function $C^\infty(\mathbb R^n, \mathbb R)$ that its partial derivative with respect to its $k^\text{th}$ argument is $f^{(k)}$, $$f^{(k)}(x_1,\dots x_n) = \lim_{h\to 0}\frac{f(x_1,\dots x_k+h,\dots x_n) - f(x_1,\dots x_k,\dots x_n)}{h}.$$

Then a map is Leibniz-linear if it distributes with Leibniz's chain rule over pointwise smooth functions, so $V \in \mathcal V$ means that $$V\big(f[s_1,\dots s_n]\big) = \sum_{k=1}^n f^{(k)}[s_1,\dots s_n]~V(s_k).$$ Notice that this uses all of the above, you have a pointwise sum of pointwise products of partial derivatives applied pointwise. Coordinates aren't part of the definition but of course once you use the coordinate axiom to get some, they fit right in: within that neighborhood, the vector field is wholly specified by the numbers $v^k = V(c_k)$, and any other scalar field is $s = \sum_k v^k~\partial_k \sigma.$

Happy little tensors and abstract index notation

We define the covectors as the linear maps $\bar {\mathcal V} \subset (\mathcal V \to \mathcal S),$ and more generally we define the $[m,n]$-valence tensors as multilinear maps from $(\bar{\mathcal V}^m \times \mathcal V^n) \to \mathcal S.$ We have to add an axiom to allow us to define contraction: we must specify that any $[m,n]$-tensor can be realized as some finite list of terms in $\mathcal V^m \times \bar{\mathcal V}^n.$ The way that this list works is that we apply the vectors to the input covectors and the covectors to the input vectors in order to get a finite list of scalars, then we add together the scalars to get the final resulting scalar. Like it's clear that any such finite list of tuples will be a multilinear map and hence a tensor; the axiom just needs to guarantee the reverse. Then we can define contraction as follows: write a tensor as a list of tuples and then apply for each tuple the $p^\text{th}$ covector to the $q^\text{th}$ vector, to get a scalar. Multiply that scalar times one of your vectors in that tuple, to get a list of such tuples each with one fewer vector and covector.

You may have noticed that that explanation was really long. That is where abstract index notation comes to the rescue! The idea is that we make a copy of the space of $[m, n]$-tensors for any arrangement of $m+n$ distinctive symbols we like and we write $m$ of them on top and $n$ of them on the bottom. We write this space as a $\mathcal T$ with the symbols next to it; the order of the symbols does not matter. Then tensors within that space are denoted using those same symbols, but here the order does matter. The point is that we use those symbols to encode a "wiring diagram" for how these things are combined together.

For example we just saw that there is an embedding from $\mathcal T^a \times \mathcal T^b \to \mathcal T^{ab},$ and this is our default meaning of juxtaposition: we write $A^a~B^b$ as our element of $\mathcal T^{ab}$ constructed from two members $A^a\in \mathcal T^a$ and $B^b \in\mathcal T^b$. We write the sum of two tensors to mean the obvious thing -- the multilinear map which feeds its input to both tensors and then sums the scalars back together -- but we restrict it so that both labeled spaces must be the same. Finally our "tensor component axiom" says that a given tensor must be writable as a finite sum $$\Omega^{ab\dots d}_{ef\dots h} = A^a B^b \dots D^d E_e F_f \dots H_h + I^aJ^b\dots L^dM_eN_f\dots P_h + \dots + S^a T^b \dots V^d W_e X_f \dots Z_h.$$

When we write a contraction, we repeat the same symbol on the top and bottom of a term and omit it from the space. So $T^{abcd}_{ebf}$ lives in the space $\mathcal T^{acd}_{ef}$ and comes from listing out the tuples of the original $[4,3]$-tensor $T$ and applying the second vectors to the second covectors to get a $[3,2]$-tensor.

We can define the relabeling isomorphism $\delta_a^b$ now. This is not quite the "Kronecker delta", but it has a very similar role. Rather than having a numeric value if indices are numerically the same or different, this tensor just relabels $a \leftrightarrow b$ when it is used in a contraction. We then can define the inverse of the metric tensor as $g_{ab}~g^{bc} = \delta_a^c$ if you like. All of this happens without any explicit choice of coordinates. The definition of the connection $\nabla_a$ happens without any explicit coordinates--it was in fact already defined for scalars (What would $V^a~\nabla_as$ be other than $V(s)$?!) but that cannot be uniquely extended to vectors and when you try you find that making $\nabla_a$ obey a Leibniz property still leaves a $[1, 2]$-tensor of freedom about what you're talking about; you can use this to force $\nabla_a g_{bc} = 0.$

Those should be covered already in Wald. You will notice that some things get their meaning from specific coordinates though. For example you will notice that Wald does not state $\Gamma^{a}_{bc}$ as you claim, and this is because a Christoffel symbol comes from a set of coordinates.

Extracting coordinates

This is really easy but I want to handle it for completeness; you might want to have some some basis for your vector space $e_1^a, e_2^a, \dots e_n^a.$ Especially in a coordinate neighborhood we saw that each coordinate came with a partial derivative that was Leibniz-linear in the appropriate way and so presumably was a vector.

From these vectors you will need to find a set of covectors $e^\mu_a$ that are "perpendicular to all the other ones and scaled to have inner product 1 with the correspondingly numbered vector," so that $e^\mu_a~e_\nu^a=\delta^\mu_\nu,$ where now this $\delta$ emphatically is the Kronecker $\delta$. Note that this is also the mathematics of your solid state physics course where you had a skewed coordinate system and therefore the notion of "perpendicular to all the other non-corresponding basis vectors" usually pointed in a different direction to "the corresponding vector." These upper and lower indices can also be very helpful in that context.

Then if your basis was exhaustive, you will have $v^a$ having components $v^\alpha = e^\alpha_a~v^a$ and being reconstructable from those components as $v^a = e^a_\alpha v^\alpha$ (with an Einstein sum over $\alpha$, note that abstract indices do not really Einstein sum; they just get wired together or not).

Given these you actually could take a $\Gamma^\alpha_{\beta\gamma}$ and compose it with an Einstein sum with $e^a_\alpha~e^\beta_b~e^\gamma_c$ so that you would have a valid tensor that you could hypothetically call $\Gamma^a_{bc}.$ But the reason that we say that the Christoffel symbol is not a tensor is that this tensor only has components identical to the Christoffel symbol's entries in these coordinates. If you chose a different set of coordinates and repeated the same process you would get a different tensor when all was said and done. So because you know that Christoffel symbols are not tensors you begin to see it as a type error if they are written with the abstract indices because it probably means someone is doing something weird that they shouldn't be.

  • $\begingroup$ I don't know if this is a legal comment. I' didn't understand abstract indices the first time I encountered them (several years ago) nor do I now. Surely I'ill never use them. $\endgroup$
    – Elio Fabri
    Commented Oct 25, 2018 at 12:36
  • $\begingroup$ @ElioFabri I think you're fine! They are definitely a bit harder to follow. What's at stake is that there are three ways to do tensor algebra. The first is the Einstein summation convention, which enables some expressions like $(-1)^\mu~u_\mu~v^\mu$ that are formally valid but geometric nonsense. The second involves things like wedge products and the Hodge star operator, so that you can't write nonsense, but then some non-nonsensical things like "I want to just antisymmetrize these two indices" can look complicated. Abstract indexes are a notation for the latter that looks like the former. $\endgroup$
    – CR Drost
    Commented Oct 25, 2018 at 14:43
  • $\begingroup$ So the preceding expression is seen to be formally invalid because $\mu$ was never a number in the first place, $\mu$ was just a symbol that helped us pair together the covector $u_\bullet$ and the vector $v^\bullet$ to recognize that we have to combine them together into a scalar. There is no $(-1)^\bullet$ vector and even if there were there's no obvious way to "plug it in" to this expression, we would need something like a $u_\lambda~g^{\lambda\mu}~\epsilon_{\mu\nu}~v^\nu$ to make this work and so we need to make sure our space has such an antisymmetric $\epsilon$ tensor. $\endgroup$
    – CR Drost
    Commented Oct 25, 2018 at 14:47

The best advice is to ignore abstract index notation. Strictly speaking, $\partial_at^b$ is not a tensor, hence should not be expressible in abstract index notation. A similar comment holds for $\Gamma^a{}_{bc}$, which at some point he even calls a tensor. This makes it impossible to do actual work in abstract index notation.

So just interpret everything in coordinates and nothing of value will be lost.

  • 3
    $\begingroup$ This is incorrect and Wald explains within the text what $\partial_a$ and $\Gamma^a_{\ bc}$ is. If $(U,x)$ is a local chart, then one may define a locally defined connection within $U$ as $\partial_a V^b=\partial_\mu V^\nu (dx^\mu)_a(\partial_\nu)^b$. Which is a genuine (local) connection, but one that is associated with a chart, so another chart $(U^\prime,x^\prime)$ will give a different one $\partial^\prime_a$. Same goes for the $\Gamma$s. They are genuine local tensor fields, but they are associated with charts, and when you change the chart, you replace them with another one. $\endgroup$ Commented Sep 24, 2018 at 4:47

Abstract index notation is simply a way of defining contractions in an index free notation.

For example, take a tensor $T$ of rank $(p,q)$. This means it is $p$ times contravariant and $q$ times covariant. In particular, in the index-free notation this means that it is an element of $V^p_q:=V^p \otimes V_q$ where $V^p:={\otimes}^p V$ and $V_q:={\otimes}^q V^*$ where $V$ is our underlying vector space.

If we take a basis $e_i$ in $V$ then we also get the dual basis $e^j$ of $V^*$.

We also get a canonical basis of $V^p$ and of $V_q$. These are $e_{i_1...i_p}={e_{i_1}\otimes ...e_{i_p}}$ and $e^{j_1...j_q}:=e^{j_1}\otimes ...e^{j_q}$. There is a notational conveniance that makes this simpler - the multi-index notation. We write $I:=({i_1,...i_p})$ and we say I is an index of rank $p$. Similarly, taking $J$ as an index of rank $q$ means that it is just $J:=({j_1,...j_p})$.

Then $e_I=e_{i_1...i_p}$ and $e^J=e^{j_1...j_q}$, and these are the basis of $V^p$ and $V_q$ respectively. Then the basis of $V^p_q$ is $e^J_I:=e_I \otimes e^J$

The tensor $T$ is expressed in the basis $e_I^J$ as

$T=T^I_J.e^J_I$, this when expanded is


In the usual coordinateful expression of a tensor, the basis is left implicit and we just write


which with multi-index notation is just


Now there are $pq$ ways of contracting a contravariant and covariant index. The question arises as to how we name each of these contractions. We could do this by $c^m_n.T$ and this simply says we contract the $m^{th}$ contravariant index with the $n^{th}$ covariant index. This works but gets awkward with several contractions, plus its introducing yet another notation. The Abstract Index Notation simply says that the indices tell us what contractions have been defined and the rank of the tensor. So a tensor $T^{abcde}_{pqa}$ tells us its a tensor of rank $(5,3)$ and whose first contravariant index has been contracted with the third covariant index. It leaves the basis implicit, because any basis will do, and we need not say which one has been chosen.

The moral here is that Tensors are best studied in by themselves in terms of multi-linear algebra, which unfortunately isn't particularly emphasised from what I recall of my undergraduate education and then these constructions can easily be lifted to the tangent bundle which brings us to how tensors are defined in courses on GR. I find that doing both at once is a recipe for confusion and misunderstandings.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.