The pushforward and pullback maps in

mathematics are natural ways of mapping objects like

vectors and

one-forms from one differential

manifold to another, given a

map Φ: M

_{1} → M

_{2} between points on the two manifolds. The concepts are very abstract, but they can be concretely represented in computational form when we look at specific

coordinate systems on the manifolds.

**The Pullback of a Function**

We start with two manifolds M_{1} and M_{2}, of dimension n_{1} and n_{2}, respectively. Additionally, we have a smooth map Φ: M_{1} → M_{2}. This map need only be well-defined and smooth; it does not have to be a one-to-one map, nor must it map onto the entire manifold M_{2}. Now, let's look at the space of smooth functions f(q) on points {q} in M_{2}. Is there a natural way to map these to the set of functions g(p) on points {p} in M_{1}? That is, given a function f(q), can we use the map Φ to naturally produce a function g(p) defined on M_{1}?

The answer is much simpler than the question. Simply note that the function f(Φ(p)) is a function well-defined on M_{1}. In other words, we can use the original map Φ from the points in M_{1} to the points in M_{2} to produce a new map which we call Φ^{∗}, the pullback map from functions on M_{2} to functions on M_{1}, by the formula:

Φ^{∗} [ f ] (p) = f(Φ(p))

This is clearly well-defined; given any smooth function f(q) on M_{2}, we can always use this formula to produce a function g(p) = f(Φ(p)) on M_{1}. The pullback map is not generally one-to-one, nor does it always map onto the entire space of smooth functions on M_{1}. In other words, we cannot generally "push forward" functions. In the special case that Φ is invertible, so is Φ^{∗}; we can push functions forward simply by using the pullback of the inverse map.

To summarize, the pullback of a function defined on M_{2} is simply the function's representation on points in M_{1} which get mapped to points in M_{2} by the map Φ.

**The Pushforward of a Vector**

Now we abstract the concept further by considering the space of vectors at a given point p in the manifold M_{1}, i.e. the tangent space T_{p}M. We know that the space of vectors at this point can be considered the space of directional derivatives on smooth functions, evaluated at p. In other words, vectors are smooth maps acting on functions on M_{1}. The space of smooth functions on M_{1} is itself a manifold, as is the space of smooth functions on M_{2}. Let's call these manifolds F_{1} and F_{2}. We have already constructed a map between these spaces; this is just the pullback map:

Φ^{∗}: F_{2} → F_{1}

Since vectors are themselves linear maps on F_{1}, we should be able to find a natural map to vectors on F_{2}, by pulling back again! We have to check that this map indeed produces a directional derivative, and not some general map, but for now accept that it will.

What does this map look like? Given a vector V in T_{p}M_{1}, this is a directional derivative map on functions on M_{1}, given by the formula:

**V** [ g(p) ] = V^{i}∂g/∂x^{i}|_{p},

where {x_{i}} is a local coordinate system in the vicinity of p on M_{1}. Now use the pullback map on functions to get a vector acting on functions in M_{2}. This is what we will call the pushforward map, Φ_{∗}:

**Φ**_{∗} V [ f(q) ] = **V** [ Φ^{∗}f ] = **V** [ f(Φ(p)) ]

Let's get our head straight about things. **V** is a map on functions on M_{1}. f(q) is a function on M_{2}. **Φ**_{∗} V is a vector field defined on M_{2}, which acts on functions f(q). Φ^{∗}f is a function on points in M_{1}, which is acted on by **V**.

**Computation**

We can just use the chain rule to evaluate this:

**Φ**_{∗} V [ f(q) ] = **V** [ f(Φ(p)) ] = V^{i} ∂f/∂x^{i} = V^{i} (∂Φ^{k}/∂x^{i}) ∂f/∂Φ^{k} = (∂y^{k}/∂x^{i}) ∂f/∂y^{k}

Here, we're also using a local coordinate chart on M_{2}, {y^{k}}. We have simplified the notation by expressing Φ(p) in both of the coordinate representations as y^{k}(x^{i}).

We now have a natural map from T_{p}M_{1} to T_{Φ(p)}M_{2}. We can think of this map as a matrix A_{ik} = ∂y^{k}/∂x^{i} acting on the vector **V**. A_{ik} is an n_{2} × n_{1} matrix, mapping the n_{1} components of **V** to the n_{2} components of **Φ**_{∗}V. Note that A_{ik} is coordinate-dependent. Notice also that we can push vectors forward, but we cannot pull them back, unless Φ has an inverse map. In other words, A_{ik} is not generally an invertible matrix (It might not even have the same number of rows as columns).

Another way to see how the pushforward map acts on vectors is to look at another natural manifestation of the tangent vector space T_{p}M_{1}: velocities of curves passing through p. Since Φ maps points in M_{1} to points in M_{2}, it naturally maps curves in M_{1} to curves in M_{2}. It is easy to show that this is the same pushforward map that we defined on directional derivatives. The velocity of the mapped curve is given by the same chain rule as above. This is a nice way of picturing the pushforward map on vectors, as it requires no computation to properly visualize.

**The Pullback of a One-Form**

Just when you thought we couldn't take the definitions any deeper, we are about to define yet another pullback map. We know that one-forms are linear maps on vector fields, and therefore we can define the pullback of a one-form to be the one-form's action on pushed-forward vector fields:

**Φ**^{∗}ω[ **V** ] = **ω**[ **Φ**_{∗}V ]

Again, let's make sure we know what we're looking at. **ω** is a one-form in M_{2}; that is, a linear map on vectors in M_{2}. **V** is a vector in M_{1}. **ω** cannot act directly on **V**, because they live on different manifolds. **Φ**^{∗}ω a one-form in M_{1}, which acts on vectors **V** in M_{1}. This action of **Φ**^{∗}ω on **V** in M_{1} is dictated by **ω**'s action on the vector pushed forward to M_{2}. That is exactly what we've written down.

**Computation**

**Φ**^{∗}ω[ **V** ] = **ω**[ A_{ik} V^{i} ∂/∂x^{k} ]

= A_{ik} V^{i} **ω**[ ∂/∂x^{k} ]

= V^{i} A_{ik} ω_{k}

= (A^{T} ω)_{i} V^{i}

Thus, the pullback of a one-form is given by the action of the *transposed* matrix A^{T} acting on its components. We might have expected this, especially if we note that A is an n_{2} × n_{1} matrix, while A^{T} is an n_{1} × n_{2} matrix, which is exactly what we'd need to send the n_{2} components of **ω** to an n_{1}-component one-form defined on M_{1}.

In general, we can pull back any (0,k) tensor, and push forward any (k,0) tensor, the generalization being to simply multiply by additional copies of the matrix A or A^{T}. However, we cannot do the reverse, nor can we push or pull any (l,m) tensor, for nonzero l and m, unless Φ is invertible. In the case where Φ is invertible, it is completely possible to push or pull tensors of any rank, essentially by multiplying by inverse matrices, where applicable. Obviously there are some details to be filled in, but you get the idea.

**Examples**

A readily available example shows up in the coordinate charts on a given manifold, M. Notice that any coordinate chart (usually also labeled Φ, which might normally confuse us, but in this case they are referring to the same function) is an invertible map between an open set in M and an open set in R^{n}. Therefore, we can pull functions on M back to functions on R^{n}. This is how we define things like continuity and differentiability, and in the case of complex manifolds, analyticity. We pull functions back to R^{n}, and evaluate these properties in a more concrete setting.

We can also push vectors from R^{n} to T_{p}M, using a coordinate chart in a neighborhood of p. This is essentially what we are doing when we determine the components of a vector **V**, for a given coordinate system, given by Φ. Different coordinate charts will generally give us different push-forward maps, which give us different components for **V**.

**The Special Case M**_{1} = M_{2}

Set M_{1} = M_{2} = M. In other words, look at bijective maps Φ: M → M from a manifold onto itself. In particular, look at a smoothly varying family of such maps, {Φ_{pq}}, where Φ_{pq} is a smooth, bijective map from M onto itself, which maps p to q. An example of this is the family of rotations on the manifold of S^{1}, the circle. For any two points p and q on the circle, there is a unique rotation Φ_{pq} which sends p to q (rotations by θ and θ + 2π are considered to be indistinct).

We can define Φ-invariant vector fields on M to be vector fields which are invariant under the pushforward map Φ_{pq∗}: T_{p}M → T_{q}M. Thus, **V**(q) = **Φ**_{pq∗} V(p). The set of Φ-invariant vector fields forms a vector space, since any two invariant vector fields can be added together to find another invariant vector field. It is easily seen that this vector space is equivalent to T_{p}M, for any point p in the manifold, for we can push any tangent vector forward from p to every point q in the manifold, using Φ_{pq∗}, producing a manifestly invariant vector field: **V**(q) = **Φ**_{pq∗} V_{p}. Since we can do this for any vector **V** at p, and since Φ_{pq} is bijective (by assumption here), we can output a unique invariant vector field **V**(q) given any vector **V**_{p} at p. Going back the other direction is even easier. Given an invariant vector field, we can get a unique vector **V**_{p} ∈ T_{p}M, simply by evaluating the vector field at p: **V**_{p} = **V**(p). Notice also that these two maps are linear.

Let's make this more concrete with the example of rotations on the circle. Given a point p on the circle, and a vector **V**_{p} at p, we should be able to produce a Φ-invariant vector field for all {q} on the circle. In this simple case, the vector space is one-dimensional, so **V**_{p} = V ∂/∂θ|_{p}, and the vector field is just constant: **V**(q) = V ∂/∂θ|_{q}. In higher-dimensional examples, the Φ-invariant vector fields are less trivial.

We have now shown that there is a natural linear correspondence between T_{p}M and the Φ-invariant fields on the manifold M. This is useful because it provides yet another manifestation of the tangent space, T_{p}M, whenever the manifold M possesses a smooth family of maps Φ_{pq}, for all q ∈ M. This picture may seem circular, since it requires an understanding of vector fields, but it can be a powerful manifestation nonetheless, as it provides a connection between the local and the global.

The notation for pullback should be an upper-asterisk, and a lower-asterisk for pushforward. This will probably not resolve properly on most computers; it will most likely just look like a dot to you.