Hermann Grassmann
1. Covectors and One-Forms
A tangent vector eats a function and returns a number:
\[ X(f) = X^\mu \frac{\partial f}{\partial x^\mu} \tag{1} \]
But there are two inputs in that expression! As we do in linear algebra, fix the function instead and let the vector be the input. Then \(f\) becomes a machine taking vectors to numbers. These are the elements of the dual space, a.k.a covectors a.k.a linear operator a.k.a one-forms a.k.a… Yeah, they have a lot of names! But they’re ultimately the same thing, so let’s describe them.
1.1 The dual space
\(T_pM\) is a vector space, and any vector space has a dual: the set of all linear maps from it to \(\mathbb{R}\). Write it \(T_p^*M\), call its elements covectors, and write the action of \(\omega\) on \(X\) as
\[ \omega(X) \in \mathbb{R} \tag{2} \]
with linearity meaning \(\omega(aX + bY) = a\omega(X) + b\omega(Y)\).
Given a basis \(\{\partial_\mu\}\) for \(T_pM\), there's a natural basis for the dual, defined by what it does to that basis. Write it \(\{dx^\mu\}\), specified by
\[ dx^\mu(\partial_\nu) = \delta^\mu_\nu \tag{3} \]
So \(dx^n\) returns the nth component of whatever vector you feed it. That's the dual basis, and it has the same number of elements as the original, so
\[ \dim T_p^*M = \dim T_pM = n \tag{4} \]
Expand a general covector as \(\omega = \omega_\mu dx^\mu\). Feeding it a vector,
\[ \omega(X) = \omega_\mu dx^\mu (X^\nu \partial_\nu) = \omega_\mu X^\nu \delta^\mu_\nu = \omega_\mu X^\mu \tag{5} \]
A sum over one upper and one lower index. This is the canonical vector-covector pairing. This statement is the same as a row times column vector.
1.2 The differential of a function
Back to the object we started with. For a smooth \(f\), define \(df\) by
\[ df(X) = X(f) \tag{6} \]
It's linear in \(X\), so it's a covector. Expand it in the dual basis by finding its components, so feed it the basis vectors:
\[ df(\partial_\mu) = \partial_\mu(f) = \frac{\partial f}{\partial x^\mu} \tag{7} \]
so
\[ df = \frac{\partial f}{\partial x^\mu} dx^\mu \tag{8} \]
which is the expression everyone writes in calculus without being told what it means. But it’s NOT an infinitesimal. It's a linear map on tangent vectors, and this is its component expansion. The notation is consistent, too. Apply the definition to the coordinate function \(x^\mu\) itself:
\[ d(x^\mu)(\partial_\nu) = \partial_\nu(x^\mu) = \delta^\mu_\nu \tag{9} \]
which is exactly the dual basis condition. So the basis covector \(dx^\mu\) really is the differential of the coordinate function \(x^\mu\).
1.3 Transforming the other way
Take two charts and relate the dual bases by the chain rule:
\[ dx^\mu = \frac{\partial x^\mu}{\partial \tilde{x}^\nu} d\tilde{x}^\nu \tag{10} \]
The covector itself is one object regardless of chart, so
\[ \omega = \omega_\mu dx^\mu = \omega_\mu \frac{\partial x^\mu}{\partial \tilde{x}^\nu} d\tilde{x}^\nu = \tilde{\omega}_\nu d\tilde{x}^\nu \tag{11} \]
giving
\[ \tilde{\omega}_\nu = \frac{\partial x^\mu}{\partial \tilde{x}^\nu} \omega_\mu \tag{12} \]
Compare it with what we got for vectors last post:
\[ \tilde{X}^\nu = \frac{\partial \tilde{x}^\nu}{\partial x^\mu} X^\mu \tag{13} \]
So the Jacobians are inverses of each other. Vector components transform one way, covector components transform the opposite way, which is where the definition of a vector comes from: a vector is an object that transforms like a vector. If you contract them:
\[ \tilde{\omega}_\nu \tilde{X}^\nu = \frac{\partial x^\mu}{\partial \tilde{x}^\nu} \omega_\mu \frac{\partial \tilde{x}^\nu}{\partial x^\lambda} X^\lambda = \frac{\partial x^\mu}{\partial x^\lambda} \omega_\mu X^\lambda = \delta^\mu_\lambda \omega_\mu X^\lambda = \omega_\mu X^\mu \tag{14} \]
The two Jacobians collapse into a Kronecker delta and the answer is chart-independent. So \(\omega(X)\) is a number every observer agrees on, which is why we use them in physics. This is also the reason behind the index rules. An upper index with a lower index gives something coordinate-free. Two upper indices summed together would give you a quantity that changes when you change charts, which is why \(X^\mu Y^\mu\) is meaningless.
1.4 Not arrows - stacks
I hated this definition when it was given to me. I just did not see it for ages. I only really understood it after learning about the integration of k-forms, and now it makes a lot of sense. But maybe it was just me, and it was the standard definition, so it’s the one I’ll give. Anything original would probably just be circular and end up at this definition anyway. So covectors have this geometric interpretation, and even though we write them similarly to vectors they are not arrows. A covector at \(p\) is a linear map to \(\mathbb{R}\), so it has level sets, i.e. the vectors it sends to \(0\), to \(1\), to \(2\), and so on. These are evenly spaced parallel hyperplanes in \(T_pM\). So the covector is the stack and the coefficients determine how far apart they’re spaced. To evaluate \(\omega(X)\), lay the vector \(X\) down at the origin and count how many surfaces it pierces. A big covector has closely packed surfaces, so any given vector pierces many of them. A small covector has widely spaced ones. For \(df\) the idea is the contour lines of \(f\). Where \(f\) changes rapidly the contours bunch up; a step in that direction crosses many, so \(df(X)\) is large. Where \(f\) is flat they spread out. So the covector is the set of lines of a topographic map.
1.5 A function on the sphere
Take the sphere with the stereographic chart from post 1, and let \(f = z\), the height. We found there that \(u^2 + v^2 = (1+z)/(1-z)\), and solving for \(z\) with \(s = u^2+v^2\):
\[ z = \frac{s-1}{s+1} \tag{15} \]
Differentiate. Since \(dz/ds = 2/(s+1)^2\) and \(\partial s/\partial u = 2u\),
\[ \frac{\partial f}{\partial u} = \frac{4u}{(u^2+v^2+1)^2}, \qquad \frac{\partial f}{\partial v} = \frac{4v}{(u^2+v^2+1)^2} \tag{16} \]
so
\[ df = \frac{4}{(u^2+v^2+1)^2} \left( u \, du + v \, dv \right) \tag{17} \]
At \(u = v = 0\) (the south pole, where \(z\) is minimised) the whole expression vanishes. Correct: the differential of a function is zero at a critical point!
As \(u^2+v^2 \to \infty\) we approach the north pole, where \(z\) is maximised. The numerator grows like \(r\) while the denominator grows like \(r^4\), so \(df \to 0\) there too. Also correct, and the north pole isn't even in this chart, so we're seeing its critical point as a limit. Two critical points on a sphere, which is the minimum any smooth function can have. That's a topological fact and it’s for another post.
1.6 The gradient problem
In ordinary vector calculus the gradient is a vector, pointing uphill. Here \(df\) came out as a covector, and there's no way to turn it into a vector. The transformation laws are different so no chart-independent formula exists for converting one into the other. What lets you do it in \(\mathbb{R}^3\) is the dot product. Given a covector \(\omega\) you can ask which vector \(V\) satisfies \(\omega(X) = V \cdot X\) for all \(X\), and the dot product picks one out uniquely. But that's extra structure a manifold might not have. So the familiar gradient vector is a covector plus a hidden metric.
We have two objects: vectors, with an upper index, and covectors, with a lower index, transforming inversely so their contraction is invariant. The obvious move is to build machines eating several of each. A map taking two vectors to a number, or one vector and one covector, and so on. And one that transforms how? Like a tensor! Yep, those are tensors, generalized (co)vectors. Not that scary now! Which is why a rank-1 tensor (a vector or covector) takes in the opposite to give a number, and why a rank-2 tensor (a matrix) takes in a vector and a covector to turn into a scalar!