Linear Algebra with Frames

July 10, 2026

I have a bunch of notations I like to use for linear algebra and vector calculus which are at this point scattered across various notes and posts. I wanted to consolidate them in one place so that I can refer to them later.

I am pretty sure that the ideas in here are useful and that various parts of math and physics would benefit from incorporating them. However, I’m not sure I have figured out the best ways of stating them all yet. Probably I will make some edits to this over time as I settle on better and less-confusing ways of writing things. Note that the concept of a frame, and its utility in interpreting linear algebra, is not coupled to the division notation which I like to use to write it, so if you don’t like the notation feel free to ignore it.

(Most of this crystallized for me a few years ago, but I got so “blocked” on getting it exactly right that I lost motivation and put the whole thing away every time I tried to write it up. Recently I decided it would be better to just publish the broken version so I can stop having it hanging over me, and I can fix it later if I figure it out, or if somebody clues me into what I’m missing.)

All vector spaces considered are finite-dimensional and over \(\bb{R}\) and come with the standard Euclidean dot product. Much of this works without those restrictions but it’s good to start with something easy to visualize. The linear span of vectors or vector spaces is denoted \(\< \x, \y, \ldots \> \equiv \span(\x, \y, \ldots)\).


1. Projections

First, some useful notations for talking about projections and subspaces. Even if the rest of this article seems silly you should still help me standardize these.

The projection operator (or ‘projector’) for a vector space \(X\) is written

\[I_X\]

I prefer the symbol \(I\) over the usual \(P\) because these operators are exactly the identity transformation for the spaces they project onto. This is why the idempotency condition \(P^2 = P\) which is often taken as a definition for projections holds—because identities are inherently idempotent:

\[I_X^2 = I_X\]

Given any basis for a space \(X\), the matrix representation of \(I_X\) will look like an identity operator. For example if \(X = \< \x, \y\> \sub \bb{R}^3 = \< \x, \y, \z \>\) and \(I_X\) acts on a vector \(\b{a} = a_x \x + a_y \y + a_z \z\), then1

\[\begin{aligned} I_{X} \b{a} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 0 \end{pmatrix} \begin{pmatrix} a_x \\ a_y \\ a_z \end{pmatrix} = \begin{pmatrix} a_x \\ a_y \\ 0 \end{pmatrix} \end{aligned}\]

In the case where the vector space labeled by a projection is one dimensional, like \(\<\b{x} \>\), we write just the non-bolded symbol for subspace instead for brevity:

\[I_x \equiv I_{\< \x\>}\]

If the vector space is spanned by multiple basis vectors which have letter names, like \(\<\x, \y\>\), then we also write the list of all of these as the subscript to label the space:2

\[I_{xy} \equiv I_{\< \x, \y \>}\]

If a vector space decomposes into subspaces \(V = X \oplus Y\), then its projections also decompose:

\[I_V = I_X + I_Y\]

For example, if \(V = \bb{R}^3\) with its \((\x, \y, \z)\) basis then we can write

\[\begin{aligned} I_{xy} &= I_x + I_y \\ I_{xyz} &= I_{xy} + I_z = I_x + I_y + I_z \\ \end{aligned}\]

Vector projections onto a subspace are shorthanded by writing the subscript on the vector itself:

\[\b{a}_X \equiv I_X \b{a}\]

Decompositions of a vector space and its projectors carry forward onto vector projections:

\[\b{a}_{V} = \b{a}_{X \oplus Y} = \b{a}_X + \b{a}_Y = (I_X + I_Y) \b{a}\]

Therefore in \(\bb{R}^3\), all of these ways of writing a vector are equivalent:

\[\b{a} = \b{a}_{xyz} = \b{a}_{xy} + \b{a}_z = \b{a}_x + \b{a}_y + \b{a}_z\]

Given a vector subspace \(X \sub V\), there is an orthogonal subspace \(X_{\perp}\) (which I pronounce “\(X\)-perp”) such that \(V = X \oplus X_{\perp}\). The projection onto this subspace is

\[I_{\perp X} = I - I_X\]

I write \({\perp} X\) in subscripts instead of \(X_{\perp}\) just because it is easier to read as the symbols become smaller.3 (The word ‘orthogonal’ here technically requires an inner product, but if one is not available you can call it the complementary subspace instead; the idea is the same.)

The projector for this orthogonal subspace is the rest of the vector after removing the projection onto \(X\):

\[\b{a}_{\perp X} = I_{\perp X} = (I - I_X) \b{a} = \b{a} - \b{a}_X\]

A vector space \(V\) which contains \(X\) generically factors into \(V = X \oplus X_{\perp}\), and each of its vectors can be split according to this factorization4

\[\b{a} = I_V \b{a} = (I_X + I_{\perp X}) \b{a} = \b{a}_X + \b{a}_{\perp X}\]

When we write a vector \(\b{a}\) without any subscript, we usually ambiently know that it is supposed to be an element of some explicit vector space, \(\b{a} \in V\). Sometimes it is elegant to regard this as a shorthand for explicitly projecting it into that space:

\[\b{a} \stackrel{\text{means?}}{=} \b{a}_V = I_V \b{a}\]

This doesn’t affect any results, but it can be a nice way to think about things. In particular it implies the interpretation that \(\b{a}\) really refers to what we know about \(\b{a}\), based on the space in which we are viewing it, but that perhaps there is more data in there which we are missing by restricting it to this space.

Similarly, the symbol \(I\) with no subscript at all means “the identity on the ambient space \(V\)”, but we can think of it as a shorthand for an explicit \(I_V\). A scalar \(1\) is often interpreted as a sort of “identity on everything” operation as well; I tend to think that this is a mistake, and we should think of all scalars as being scoped to some particular space that they act on. But this is a philosophical distinction and mostly should not affect anything.5


2. Vector Division

Projectors like \(I_{xy}\) and \(I_V\) are linear transformations, which look like the identity on their respective subspaces. Their matrix representations are sparse: they have \(1\)s along the diagonal corresponding to the subspace and \(0\)s elsewhere. A very compact way of writing linear transformations of this form is by listing only the terms that are nonzero. My preferred way of writing this is as vector division:

\[\begin{aligned} I_x &= \frac{\x}{\x} \\ I_y &= \frac{\y}{\y} \\ I_{xy} &= I_x + I_y = \frac{\x}{\x} + \frac{\y}{\y} \end{aligned}\]

Here \(\frac{\x}{\x}\) is interpreted as the linear transformation \(\x \o \x^{-1} = \x \o \frac{\x^*}{\| \x \|^2}\). More generally we write

\[\frac{\b{b}}{\b{a}} \equiv \b{b} \o \b{a}^{-1} = \b{b} \o \frac{\b{a}^*}{\| \b{a} \|^2}\]

Theses are the rules for interpreting a vector division expression:

  1. Fractions do not cancel with themselves. Instead \(\x / \x\) is interpreted as a shorthand for \(\x \o \x^{-1}\).
  2. \(\x^{-1}\) or \(\frac{1}{\x}\) means \(\frac{\x^*}{\| \x \|^2}\), the unique vector in \(\< \x \>\) which has \(\x^{-1} \cdot \x = 1\).
  3. For convenience, juxtaposition of an inverse vector on the left with a numerator or bare vector on the right implies a dot product: \(\frac{1}{\x} \b{a} = \x^{-1} \b{a} \equiv \frac{\x}{\| \x \|^2} \cdot \b{a} = a_x\).
  4. No contraction occurs if a denominator is on the left of a numerator. Instead, a tensor product is implied: \(\b{a} \b{a}^{-1} \equiv \b{a} \o \b{a}^{-1}\)
  5. The dual symbol \(\b{a}^*\) is used whenever we write a denominator as a numerator instead, to remind us that it is ‘acting like’ a denominator. We mostly don’t use this, but I include it to connect things to the way they are usually written.

In the case of unit \(\x, \y\), we have

\[\frac{\x}{\y} = \x \o \y^* = \x \y^*\]

In the case of non-unit \(\b{a}\) we have

\[\frac{\b{b}}{\b{a}} = \b{b} \o \frac{\b{a}^*}{\| \b{a} \|^2} = \frac{1}{\| \b{a} \|^2} \b{b} \b{a}^*\]

The implication of these rules is that a denominator \(\x\) selects only the numerator \(\x\)s from the thing it acts on:

\[\begin{aligned} I_x \b{a} &= \frac{\x}{\x} (a_x \x + a_y \y + a_z \z) \\ &= a_x \frac{\x}{\x} \x + a_y \frac{\x}{\bcancel{\x}} \bcancel{\y} + a_z \frac{\x}{\bcancel{\x}} \bcancel{\z} \\ &= a_x \x \\ &= \b{a}_x \\ I_{xy} \b{a} &= (\frac{\x}{\x} + \frac{\y}{\y}) (a_x \x + a_y \y + a_z \z) \\ &=a_x \x + a_y \y \\ &= \b{a}_{xy} \end{aligned}\]

Hopefully it is clear that this might be a useful way of writing things. Let me emphasize, though, that these notations to be understood as shorthands for explicit operations on the underlying tensors. The reason \(\x/\x\) does not cancel out to give \(1\) is because it is such a common object that it’s convenient to regard it as a tensor, and \(\x^{-1} \b{a}\) implies a dot product because it’s useful, not because we are defining a canonical way of doing algebra that cancels inverses but not other terms. We are always free to insert dot and tensor product symbols to make more complicated expressions like \((\x \o \y^{-1} \o \z) \cdot \b{a}\) unambiguous. Also, although there is nothing stopping one from writing higher-degree tensors with more fractions, like \(\Gamma = \x \y \frac{1}{\x}\), the division notation stops be as helpful at that point because there is not a good way to do anything with the term in the middle.

This interpretation of \(1/\x\) is as a pseudoinverse of the linear transformation given by dotting with \(\x\), \(\x \cdot: \b{a} \mapsto \x \cdot \b{a}\), evaluated at \(1\). Being a pseudoinverse it is nonzero on the image of \(\x \cdot\) and \(0\) elsewhere.

\[\begin{aligned} \frac{1}{\x} \cdot \x &= 1 \\ \frac{1}{\x} \cdot \y &= 0 \\ \frac{1}{\x} \cdot \z &= 0 \\ \end{aligned}\]

The job of division by a vector \(\x\) is to extract the \(\x\)-component of the vector it acts on,

\[\frac{1}{\x} \b{a} = \frac{1}{\x}(a_x \x + \b{a}_{\perp x}) = a_x\]

Multiplying by \(\x\) again therefore gives the vector projection again:

\[\b{a}_x = \frac{\x}{\x} \b{a} = \frac{\b{a} \cdot \x}{\| \x \|^2} \x\]

In my opinion these definition of the scalar and vector projections are the most useful ones. Note that the scalar projection is usually defined as the component of \(\b{a}\) along the unit vector \(\hat{\x} = \x / \| \x \|\) instead,

\[\proj_{x} (\b{a}) \? \b{a} \cdot \frac{\x}{\| \x \|}\]

such that \(\b{a}_x = a_{\hat{x}} \hat{\b{x}}\), and it gives the “shadow” of \(\b{a}\) along the direction of \(\b{x}\). I think this definition strictly less useful, since it can’t express the general concept of the “\(\x\)-component of \(\b{a}\)”. You can always recover it by manually projecting onto a unit vector if you want.


Vector division notations are helpful for doing symbolic algebra on linear transformations, especially sparse ones. For example the operator of rotation in the \((x,y)\) plane of \(\bb{R}^3\) can be written

\[R_{xy} = (\frac{\y}{\x} - \frac{\x}{\y}) + \frac{\z}{\z} = r_{xy} + I_z\]

Where \(R_{xy}\) is the entire operator and \(r_{xy} = \y/\x - \x/\y\) is the generator (also related by \(R_{xy} = e^{r_{xy} \frac{\pi}{2}}\).) Mirroring across the \(x=y\) axis is given by:

\[P_{xy} = \frac{\y}{\x} + \frac{\x}{\y} + I_z\]

Et cetera. Calculations with linear transformations written in this form consist of cancelling terms, which is fairly easy to do by hand (certainly compared to multiplying matrices). Here the surviving three terms are those where the denominator on the left term matches the numerator on the right:

\[\begin{aligned} R_{xy}^2 &= (\frac{\y}{\x} - \frac{\x}{\y} + \frac{\z}{\z}) (\frac{\y}{\x} - \frac{\x}{\y} + \frac{\z}{\z}) \\ &= (\frac{\y}{\x}) (- \frac{\x}{\y} ) + (-\frac{\x}{\y})(\frac{\y}{\x}) + (\frac{\z}{\z})(\frac{\z}{\z}) \\ &= -\frac{\y}{\y} - \frac{\x}{\x} + \frac{\z}{\z} \\ &= - I_{xy} + I_z \end{aligned}\]

More general calculations proceed by factoring the term on the right:

\[\frac{1}{\x} \b{a} = \frac{1}{\x} (\b{a}_x + \b{a}_{\perp x}) = \frac{1}{\x} (a_x \x + \b{a}_{\perp x}) = a_x\]

A projector like \(I_{xy}\) is the identity on the space it describes regardless of the choice of basis for that space. If \(\< \x, \y \>\) is also spanned by some other orthogonal basis \(( \b{e}^1, \b{e}^2 )\), then in that basis \(I_{xy}\) takes the form

\[I_{xy} = \frac{\x}{\x} + \frac{\y}{\y} = \frac{\b{e}^1}{\b{e}^1} + \frac{\b{e}^2}{\b{e}^2}\]

which still has matrix form \(\diag(1,1)\) in this basis. (The orthogonality of \((\b{e}^1, \b{e}^2)\) is important for this; more on that later.)

Another useful thing you can do is talk about the projections and rejections for an arbitrary vector in a compact way. Suppose \(\b{n}\) is a normal vector to a surface \(S\) in \(V = \bb{R}^3 = \< \x, \y, \z \>\). Then we can write the rejection and projection operators for tangent vectors for this surface as

\[\begin{aligned} I_n =& I_{\perp S} = \frac{\b{n}}{\b{n}} \\ I_S &= I_{\perp n} = I_{xyz} - I_n = \frac{\x}{\x} + \frac{\y}{\y} + \frac{\z}{\z} - \frac{\b{n}}{\b{n}} \end{aligned}\]

If we happen to know that orthogonal vectors \((\b{u}, \b{v})\) span the surface \(S\), we can also write these as

\[\begin{aligned} I_S &= I_{uv} = \frac{\b{u}}{\b{u}} + \frac{\b{v}}{\b{v}} \\ I_{\perp S} &= I_n = I_{xyz} - I_{uv} \\ &= (\frac{\x}{\x} + \frac{\y}{\y} + \frac{\z}{\z}) - (\frac{\b{u}}{\b{u}} + \frac{\b{v}}{\b{v}}) \end{aligned}\]

These are quite a bit easier to work with than their matrix representations, especially on paper. If you want you can factor them out into individual terms to get something equivalent to the matrix form in a particular basis. For example, if \(\b{n} = \x + \y + \z\), then this becomes

\[\begin{aligned} I_n &= \frac{\x + \y + \z}{\x + \y + \z} \\ &= (\x + \y + \z) \o \frac{\x^* + \y^* + \z^*}{\| \x + \y + \z \|^2} \\ &= \frac{1}{3} (\x + \y + \z) \o (\x^* + \y^* + \z^*) \\ &= \frac{1}{3} [\frac{\x}{\x} + \frac{\x}{\y} + \frac{\x}{\z} + \frac{\y}{\x} + \frac{\y}{\y} + \frac{\y}{\z} + \frac{\z}{\x} + \frac{\z}{\y} + \frac{\z}{\z}] \\ I_S &= \frac{\x}{\x} + \frac{\y}{\y} + \frac{\z}{\z} - \frac{1}{3} (\text{...all that stuff...}) \end{aligned}\]

where the complicated formulas’ components are exactly the components of the equivalent matrix in the \((\x, \y, \z)\) basis. Usually it is preferable not to do this, though.

In some fields you will see dyadics like \(\x\x\) used to express the same idea as \(\x/\x\), since for unit \(\x\) they are equal: \(\x\x \cdot \b{a} = \x (\x \cdot \b{a}) = a_x \x\). I think this notation is strictly inferior to vector division, however. Although the juxtaposition notation is useful for constructing tensors, especially of degree \(>2\), it doesn’t work as well for linear transformations: you really do want to represent the ‘input’ as a denominator, since for most purposes it acts like one. In the case of \(\x\x\), the \(\x/\x\) notation correctly handles the case where \(\x\) is of non-unit length. It also generalizes in useful ways that dyadics cannot, to be described shortly.

A helpful thing about the \(I_x = \frac{\x}{\x}\) notation is that it explicitly labels the “input” and “output” vectors of the linear transformation: denominators are inputs; numerators are outputs. This also reflects the way the two components transform under coordinate changes: numerators are covariant and denominators are contravariant, i.e. transform with the inverse transformation. The more standard way to express this is to rely on the vector space dual operation, \(I_x = \x \o \x^*\) where the asterix indicates a contravariant dual vector \(\x^* \in V^*\). I don’t like this as much. Dual vectors are awkward, and it doesn’t automatically create a projector if \(\x\) has non-unit length, since under the transformation \(\x \ra 2\x\) this needs to transform as \(I_x = (2 \x ) \o (\frac{1}{2} \x^*)\). I think that since the second term transforms like an inverse we may as well write it as one. The more complicated case where we transform coordinates by mixing them together can also be handled elegantly, as we will see later.


3. Frames

We saw that \(\frac{1}{\b{x}} \b{a} = a_x\) gives the “\(x\)-coordinate of \(\b{a}\)”, that is, the object which when multiplied by \(\x\) gives \(\b{a}_x\) again:

\[\b{a}_x = a_x \x = \frac{\x}{\x} \b{a} = I_x \b{a}\]

The same calculation can be extended to subspaces which are more than one-dimensional. For example, we can project \(\b{a}\) onto \(\< \x, \y \>\) with

\[I_{xy} \b{a} = (\frac{\x}{\x} + \frac{\y}{\y}) \b{a} = a_x \x + a_y \y\]

It is helpful to think of this as the product of a tuple with another tuple,

\[I_{xy} \b{a} = (a_x, a_y) \cdot (\x, \y) = a_{xy} (\x, \y)\]

such that \(a_{xy} = (a_x, a_y)\) can be thought of as the “\((xy)\)-coordinate of \(\b{a}\)”. Of course, the word ‘coordinate’ is not quite valid anymore, since it is not a scalar but a tuple of scalars. Nevertheless it is a good label. Describing vectors in this way turns out to be nice way of thinking about things.

The object \((\x, \y)\) here is what I like to call a frame, which is a generalization of a vector. A frame is a tuple of linearly-independent vectors, or a ‘vector of vectors’—isomorphic to a matrix, but with a particularly useful interpretation. We will also say that a \(k\)-frame is a tuple of exactly \(k\) such vectors, and for most purposes a single vector can be regarded as a \(1\)-frame. A basis for an \(N\)-dimensional vector space is therefore an \(N\)-frame. An orthogonal frame is a frame whose vectors are mutually orthogonal, and an orthonormal frame is one whose vectors are orthonormal.6

I usually label frames with capital letters, and when possible choose the same letter as the vector space they span, for example \(X = (\x, \y)\) is a frame which spans the vector space \(X = \< \x, \y \>\). This just turns out to be convenient in practice, but there are cases where you want to distinguish the two. For instance you might have two distinct frames for the same subspace, like \((\x, \y)\) and \((\x + \y, \x - \y)\) which are both bases for \(\< \x, \y \>\), in which case you will want to give them different names to distinguish them. But for the most part conflating frames and the vector spaces they span is a useful convention. (Sometimes I think it might be better to use bold capital letters for frames, but for now I won’t.)

Frames allow us to use the same notations for components of vectors along subspaces of any dimension. If a vector space \(V = X \oplus Y\), then a vector \(\b{a} \in V\) decomposes as \(\b{a} = \b{a}_X + \b{a}_Y\), and we can write each component as a product of a coordinate and a frame for that subspace:

\[\begin{aligned} \b{a} &= I_X \b{a} + I_Y \b{a} \\ &= a_X X + a_Y Y \\ &= (a_{x_1}, a_{x_2}, \ldots) (\x^1, \x^2, \ldots) + (a_{y_1}, a_{y_2}, \ldots) (\y^1, \y^2, \ldots) \end{aligned}\]

A particularly common usage for this is that it lets us generically factor \(\b{a}\) into its components on and off of a subspace:

\[\b{a} = \b{a}_X + \b{a}_{\perp X} = a_X X + a_{\perp X} X_{\perp}\]

which implies bases for \(X\) and \(X_{\perp}\) without having to actually write down what they are.

A surprising amount of linear algebra generalizes to work on frames instead of vectors without much modification. This suggests a perspective in which we don’t really know the dimensionality of the vector spaces we’re working with. When we say that \(a_x\) is the \(\x\)-component of \(\b{a}\), it doesn’t really matter if \(\x\) is a single vector or a frame of vectors. In some cases we might be inadvertently coercing the value \(a_x\) into being a scalar, losing information in the process, because we don’t have a way of thinking about it as a tuple of values. For example, perhaps we end up acciodentally viewing \(\b{a}_X\) as \(a_X X = (a_x a_y) (\x \^ \y)\), its projection onto a particular quotient space of the full frame \(X\), in a situation where we actually have the full data of \(a_x \x + a_y \y\) available.

As with vectors, we use division notation for extracting the projections onto frames:

\[\b{a}_X = \frac{X}{X} \b{a} = X (\frac{1}{X} \cdot \b{a}) = a_x X\]

To make sense of this, consider a frame \(X = (\x, \y)\), which for now we assume to be orthogonal (we’ll discuss the non-orthogonal case in the next section). The inverse frame consists of the componentwise inverses of each vector in the frame:

\[\frac{1}{X} = \frac{1}{(\x, \y)} = (\frac{1}{\x}, \frac{1}{\y})\]

When this is juxtaposed with a vector, we take it to imply a dot product which “distributes over the comma” in the frame, producing a tuple of coordinates:

\[\frac{1}{X} \b{a} \equiv \frac{1}{X} \cdot \b{a} = (\frac{1}{\x}, \frac{1}{\y}) \cdot \b{a} = (\frac{1}{\x} \cdot \b{a}, \frac{1}{\y} \cdot \b{a}) = (a_x, a_y)\]

The projection \(I_X = \frac{X}{X}\) then ‘dots’ the frame with this vector again, producing the vector projection again:

\[\frac{X}{X} \b{a} = X (\frac{1}{X} \cdot \b{a}) = (\x , \y) (a_x, a_y) = a_x \x + a_y \y = \b{a}_X\]

To clarify the general meaning of this operation I’ll translate it into index notation. A generic frame is given by an upper-indexed list of vectors

\[X = (\x^1, \x^2, \ldots) = \x^i\]

Such that an arbitrary vector written out in terms of the frame’s vectors pairs a lower-indexed coordinate with an upper-indexed frame:

\[\b{a}_X = a_X X = a_i \x^i = (a_1, a_2, \ldots) (\x^1, \x^2, \ldots) = a_1 \x^1 + a_2 \x^2 + \ldots\]

Given a choice of basis \(\b{e}^j\), the frame is equivalent to a matrix action on that basis,

\[X = \x^i = (X^i_{\, j} \b{e}^j)\]

That is, \(X\) can be thought of as a linear transformation from any choice of basis into the vectors \((\x^i)\), with \(X^i_{\, j} = \x^i \cdot \b{e}_j\). But this just kicks the interpretive can down the road, because now you have to make sense of the basis frame \(E = \b{e}^j\). So we write \(X = \x^i\) and leave it at that. The individual vectors of \(X\) are to be understood as’geometric’ vectors, quantities you can measure which act like vectors, rather than numerical data in some particular coordinate system.

The inverse frame is written with lowered indices:

\[\frac{1}{X} = (\x_1, \x_2, \ldots) = \x_i\]

Such that

\[X \cdot \frac{1}{X} = \x^i \cdot \x_j = 1_{i=j}\]

Which is the sense in which is the ‘inverse’ of \(X\). Equivalently, their matrix representations in any basis are pseudoinverses:

\[X \cdot \frac{1}{X} = (X^i_{\, j} \b{e}^j) \cdot (X_i^{\, k} \b{e}_k) = \b{e}^j \o \b{e}_k \mid_X = I_X\]

The inverse frame acting on a vector produces the lower-indexed vector components in that frame:

\[\begin{aligned} \frac{1}{X} \b{a} &= (\x_i) \cdot \b{a} \\ &= (\x_1 \cdot \b{a}, \x_2 \cdot \b{a}) \\ &= (a_1, a_2, \ldots) \\ &= a_X \end{aligned}\]

Which follows from noting that it holds if you write \(\b{a}\) in its \(X\) components:

\[\x_i \cdot \b{a} = \x_i \cdot (a_j \x^j) = a_j 1_{i=j} = a_i\]

The rest of the terms cancel because of \(\x_i \cdot \x^j = 1_{i=j}\). Note how \(a_X\) is a shorthand for \(\b{a} \cdot 1/X\): lower indexes act like denominators and are contravariant, while upper indexes and numerators are covariant.

In index notation, the projector \(X/X\) contains a contraction over the frame index:

\[\frac{X}{X} = \x^i \x_i\]

And its action on a vector is given by first extracting the \(a_X\) components, then multiplying by the frame again:

\[\frac{X}{X} \b{a} = \x^i \x_i \cdot \b{a} = a_i \x^i = a_X X = \b{a}_X\]

Fully written out in matrices over some other \((\b{e}^j)\) basis this becomes

\[\frac{X}{X} \b{a} = (X^i_{\, j} \b{e}^j X_i^{\, k} \b{e}_k) \cdot (a_l \b{e}^l) = (X^i_{\, j} \b{e}^j) X_i^{\, k} a_k = \x^i (X_i^{\, k} a_k)\]

Frames can be thought of as a choice of coordinate system for the vector space they span. For example, \((\x, \y)\) is a basis for the vector space \(X = \< \x, \y \> \subset V\). Division by \((\x, \y)\) is therefore a linear transformation from the vector space \(X\) itself to some other vector space—a vector space of coordinates for \(X\) in this particular frame, which I like to write as \(\cal{I}_X\) (which I call the “index space”, for lack of a better name). Then the frame \(X = (\x, \y)\) itself is a linear transformation \(\cal{I}_X \ra X\), so it takes a vector of coordinates for \(X\) and maps them back to \(X\) itself. This is what is happening when we write out a vector in terms of coordinates:

\[\b{a}_X = a_X X \in X \subset V\]

In this sense we see that \(I_X = X/X\) amounts to contracting \(X\) and \(X^{-1}\) on their \(\cal{I}_X\) index, resulting in the identity on the space \(X\). Contracting on their \(X\) index on the other hand gives the identity on the index space,

\[\frac{1}{X} \cdot X = \x_i \cdot \x^j = I_{\cal{I}_X}\]

That is, it’s the identity operator \(\diag(1, 1, \ldots)\) but in the basis for the coordinates \(\cal{I}_X\), rather than \(X\) itself. This works like you’d expect: if \(a_X = (1/X) \b{a}\) then \((I_{\cal{I}_X}) a_X = (1/X \o X) \cdot (1/X) \b{a} = (1/X) \b{a} = a_X\) again.

Frame division, therefore, involves contracting two frames on their frame index. We can write this out explicitly by labeling a basis frame for \(\cal{I}_X\) as \((e^1, e_2, \ldots)\). Then

\[\begin{aligned} \frac{Y}{X} &= \frac{(\y^1, \y^2, \ldots)}{(\x^1, \x^2, \ldots)} \\ &= (\y^1 e_1 + \y^2 e_2 + \ldots) \cdot (\x_1 e^1 + \x_2 e^2 + \ldots) \\ &= \y^1 \x_1 + \y^2 \x_2 + \ldots \\ &= \y^i \x_i \end{aligned}\]

Since \(Y/X\) implicitly contracts on an index, it only makes sense when the numerator and denominator have the same number of components. The vector division notation \(\b{b} / \b{a} = \b{b} \o \b{a}^{-1}\) can be thought of as the \(n=1\) case of this, since vectors are \(1\)-frames.

Note that this is really what is meant by the \(X = (\x^1, \x^2, \ldots)\) tuple notation: it is a ‘vector’ over a choice of basis for \(\cal{I}_X\)

\[X = \x^1 e_1 + \x^2 e_2 + \ldots\]

and the dual frame is a vector over \(\cal{I}_X^*\)

\[\frac{1}{X} = e^1 \x_1 + e^2 \x_2 + \ldots\]

A vector’s coordinates in a particular frame \(X\) form a vector in the index space \(\cal{I}_X\):

\[\begin{aligned} \frac{1}{X}\b{a} &= (e^1 \x_1 + e^2 \x_2 + \ldots) \cdot \b{a} \\ &= a_1 e^1 + a_2 e^2 + \ldots \\ &= (a_1, a_2, \ldots) \in \cal{I}_X \end{aligned}\]

So a frame’s coordinates \(X = \x^1 e_1 + \x^2 e_2 + \ldots\) are a linear transformation \(\cal{I}_X \ra X\). The choice to write a linear transformation \(X \ra Y\) out in terms of list of vectors \(X = (\x^1, \x^2, \ldots)\) and \(Y = (\y^1, \y^2, \ldots)\) is actually the choice to insert an intermediate vector space inside the transformation, \(X \ra \cal{I}_X = \cal{I}_Y \ra Y\), which we then use to match up the basis projections of the inputs and outputs.

Each of these objects make sense without reference to the \(\cal{I}_X\) coordinate system at all, however, and we could clearly have chosen any other list of vectors \(\in X\) as a basis instead, producing a different choice of basis \((e^i)\) for \(\cal{I}_X\). The expansion of frames into bases is sort of philosophically superfluous: it is a choice of a useful way to measure things in order to write them out in a way that is computationally tractable. Even the choice of the number of vectors in the basis is a bit superfluous (although you might need to fiddle with the precise definitions of linear algebra if you allow this to vary).

So vectors and frames both acquire their components when they are ‘measured’ in a particular basis, with frames being general lists of (linearly-independent) vectors and vectors being the \(k=1\) case of frames. The value of ‘thinking in frames’ is that often the geometric objects you want to think about really are lists of vectors, rather than individual vectors, which transform as a unit. Linear transformations really act like ratios of frames, contravariant bases really act like denominators, etc.


4. Non-orthogonal frames

So far I have described projections onto frames under the assumption that the vectors in denominator frames are orthogonal, which is the condition under which can expand fractions termwise:

\[\begin{aligned} \frac{Y}{X} &= \frac{(\y^1, \y^2, \ldots)}{(\x^1, \x^2, \ldots)} \\ \stackrel{\text{orthogonal}}{\implies} &= \frac{\y^1}{\x^1} + \frac{\y^2}{\x^2} + \ldots \\ &= \y^1 \o \x_1 + \y^2 \o \x_2 + \ldots \\ &= \y^1 \o \frac{\x^{1*}}{\| \x^1 \|^2} + \y^2 \o \frac{\x^{2*}}{\| \x^2 \|^2} + \ldots \end{aligned}\]

In the case where the denominator \(X\) is not orthogonal, we can still perform a similar expansion, but it is somewhat more complicated, for the same reason that inverting a general matrix is a lot more complicated than inverting a diagonal one.

Here’s an example. Suppose you use the non-orthogonal frame \(F = \b{f}^i = (\x, \x+\y)\) to describe the vector space \((\x, \y)\). It is still possible to decompose vectors in terms of this basis, \(\b{a} = a_1 \x + a_2 (\x + \y)\). However, the actual projections are no longer independent of each other: the value of \(a_1\) is not given by \(a_x = (\x/\x) \b{a}\). That is, we can still write

\[\b{a}_F = I_{xy} \b{a} = \frac{F}{F} = \frac{(\x, \x+\y)}{(\x, \x+\y)}\]

But we cannot factor it as

\[\frac{(\x, \x+\y)}{(\x, \x+\y)} \neq \frac{\x}{\x} + \frac{\x + \y}{\x + \y}\]

Instead, the correct projector has to the use the dual basis for the frame \(X\) in the denominator. In this example it looks like this:

\[\begin{aligned} \frac{(\x, \x+\y)}{(\x, \x+\y)} &= \frac{\x}{(\x - \y)/2} + \frac{\x + \y}{\y} \\ &= \x \o \frac{(\x^* - \y^*)/2}{\| (\x - \y)/2 \|^2} + (\x + \y) \o \frac{\y^*}{\| \y \|^2} \\ &\equiv \x \o (\x^* - \y^*) + (\x + \y) \o \x^* \end{aligned}\]

Since

\[\begin{aligned} \b{a} &= \frac{(\x, \x+\y)}{(\x, \x+\y)} \b{a} \\ &= ( \frac{\x}{(\x - \y)/2} + \frac{\x + \y}{\y}) (a_1 \x + a_2 (\x + \y)) \\ &= (\x \o (\x - \y) + (\x + \y) \o \x) \cdot (a_1 \x + a_2 (\x + \y)) \\ &= a_x \x + a_2 (\x + \y) \\ &= \b{a} \end{aligned}\]

Therefore we have

\[\frac{1}{F} = \frac{1}{(\x, \x+\y)} = (\frac{2}{\x - \y}, \frac{1}{\y}) = (\x^* - \y^*, \y^*)\]

It is this dual frame \(F^{-1} \equiv (\x - \y, \y) = \{ \b{f}_i \}\) correctly obeys \(\b{f}^i \cdot \b{f}_j = 1_{i=j}\)

\[\begin{aligned} (\x - \y) \cdot (\x) &= 1 \\ (\x - \y) \cdot (\x + \y) &= 0 \\ (\y) \cdot (\x) &= 0 \\ (\y) \cdot (\x + \y) &= 1 \end{aligned}\]

that is,

\[F^{-1} \cdot F = 1_F\]

The inverse frame \(F^{-1}\) must have matrix elements corresponding to the inverse of the matrix elements of \(F\). The matrix representations are

\[\begin{aligned} F &= \begin{pmatrix} \x & \y \end{pmatrix} \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} e_1 \\ e_2 \end{pmatrix} \\ &= \x(e_1 + e_2) + \y (e_2) \\ &= (\x) e_1 + (\x + \y) e_2 \\ &= (\x, \x + \y)\\[1em] F^{-1} &= \begin{pmatrix} e^1 & e^2 \end{pmatrix} \begin{pmatrix} 1 & -1 \\ 0 & 1 \end{pmatrix} \begin{pmatrix} \x^* \\ \y^* \end{pmatrix} \\ &= e^1 (\x^* - \y^*) + e^2 ( \y^*) \\ &= (\x^* - \y^*, \y^*) \end{aligned}\]

(where I have explicitly written out the bases for each space..) The coordinate matrices are inverses:

\[\begin{pmatrix} 1 & 0 \\ 1 & 1 \end{pmatrix} \begin{pmatrix} 1 & 0 \\ -1 & 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\]

The actual construction of the dual frame \(F^{-1}\) is therefore a matrix inverse, and has to be constructed using the same exterior algebra construction as all matrix inverses. The procedure should look something like this:

\[\frac{F}{F} = (F \frac{1}{F}) \cdot \frac{F^{\^n}}{F^{\^n}} = F \frac{F^{\^n-1}}{F^{\^n}}\]

However, I don’t think that really makes sense as written. I have so far been unable to find a fluid way of doing this calculation symbolically. The problem is that it’s not clear how to keep track of which index is left ‘unbound’ in the denominator (that produces the alternating minus signs when translated into the matrix inverse). I’ll update this if I come up with something. Regardless, this is equivalent to the usual \(\adj(F)/\det(F)\) construction in, um, untyped linear algebra, but that’s not a good way of doing things either.7

The takeaway is that, if a denominator frame is not orthogonal, then you cannot factor the frames apart term-by-term:

\[\begin{aligned} \frac{X}{F} = \frac{(\x^1, \x^2)}{(\b{f}^1, \b{f}^2)} \stackrel{!}{\neq} \frac{\x^1}{\b{f}_1} + \frac{\x^2}{\b{f}_2} \end{aligned}\]

Instead you have to factor them according to the dual frame, \(F^{-1} = (\b{f}_i)\)

\[\begin{aligned} \frac{X}{F} = \frac{(\x^1, \x^2)}{(\b{f}^1, \b{f}^2)} = \x^1 \o \b{f}_1 + \x^2 \o \b{f}_2 \end{aligned}\]

where the values of the \(\b{f}_i\) are functionally dependent on the entire frame \(F\), rather than just on \(\b{f}^i\) alone.

Once we have defined \(\b{f}_i\) in this way, everything we did with division continues to work. For example,

\[\frac{F}{E} \b{a} = \b{f}^i \o \b{e}_i \cdot (a_j \b{e}^j) = \b{f}^i (\b{e}_i \cdot a_j \b{e}^j) = \b{f}^i a_j 1_{i=j} = a_i \b{f}^i\]

You just can’t rewrite \(\b{f}_i = \b{f}^{i*}/\| \b{f}^i \|^2\) anymore.


5. Linear Transformations

Linear transformations can generally be written out with a different frame in the numerator and denominator:

\[A = \frac{F}{E} = \frac{(\b{f}^1, \b{f}^2, \ldots)}{(\b{e}^1, \b{e}^2, \ldots)}\]

For example a rotation operator in \(V = \< \x , \y, \z \>\) might be written:

\[R_{xy} = \frac{(\y, -\x, \z)}{(\x, \y, \z)} = \frac{R_{xy}V}{V}\]

Its action on a vector in the \(V\) frame is to rewrite it in the \(R_{xy}V\) frame:

\[R_{xy} (\b{a}) = \frac{R_{xy} V}{V} (a_V V) = a_V (R_{xy} V) = (a_x, a_y, a_z)(\y, -\x, \z)\]

It is interesting that when you write a linear transformation like \(A \equiv \frac{AV}{V}\) as a standalone symbol, it sorta looks like you are canceling out the \(V\)s. This is probably a good way of thinking about things. I suspect the most philosophically sound way of interpreting it is that the standalone \(A\) is really supposed to be \(A_V\), so the operator \(A\)’s projection onto the vector space you are aware of (like just \(I = I_V\) above). Perhaps \(A\) also some some action on another space which you’re erasing when you project it onto your particular choice of basis frame \(V\).

So long as the vectors of the denominator are orthogonal, frame division expands by pairing elements in the numerator and denominator together and then inverting them individually:

\[\frac{F}{E} = \b{f}^1 \o (\b{e}^1)^{-1} + \b{f}^2 \o (\b{e}^2)^{-1} + \ldots = \sum_i \b{f}^i \o \frac{\b{e}^{i*}}{\| \b{e}^{i} \|^2} \tag{orthogonal}\]

which is still plenty useful in many common situations:

\[R_{xy} = \frac{(\y, -\x, \z)}{(\x, \y, \z)} = \frac{\y}{\x} + \frac{-\x}{\y} + \frac{\z}{\z}\]

But even when the denominator is not orthogonal, we can still write things out termwise using the dual frame, which in index notation corresponds to using lower-indices instead of upper ones (with an implicit summation):

\[\begin{aligned} \frac{F}{E} &= \frac{(\b{f}^1, \b{f}^2, \ldots)}{(\b{e}^1, \b{e}^2, \ldots)}\\ &= \b{f}^1 \o \b{e}_1 + \b{f}^2 \o \b{e}_2 + \ldots \\ &= \b{f}^i \b{e}_i \end{aligned} \tag{general}\]

So the behavior of a linear transformation is to select each basis vector \(\b{e}^i\) and replace it with \(\b{f}^i\).

\[\frac{F}{E} \b{a} = (\b{f}^i \b{e}_i) \cdot (a_j \b{e}^j) = a_j \b{f}^j\]

The inverse of a linear transformation (if it is invertible) is constructed by just swapping numerators and denominator frames, aka swapping upper and lower indexes:

\[A^{-1} = (\frac{F}{E})^{-1} = \frac{E}{F} = \b{e}^i \b{f}_i\]

Such that

\[\frac{E}{F} (\frac{F}{E} \b{a}) = (\b{e}^i \b{f}_i) \cdot (\b{f}^j \b{e}_j) \cdot (a_k \b{e}^k) = (a_j \b{f}^j) = a_i \b{e}^i = \b{a}\]

When the numerator and denominator frames are both orthogonal, we can construct the inverse by swapping each term in the expansion individually:

\[\begin{aligned} R_{xy} &= \frac{(\y, -\x, \z)}{(\x, \y, \z)} = \frac{\y}{\x} + \frac{-\x}{\y} + \frac{\z}{\z} \\ R_{xy}^{-1} &= \frac{(\x, \y, \z)}{(\y, -\x, \z)} = \frac{\x}{\y} - \frac{\y}{\x} + \frac{\z}{\z} \end{aligned}\]

All linear transformations on a space can be written in a form where the denominator is any particular choice of canonical basis frame like \(V = (\x, \y, \z)\). So an arbitrary linear transformation \(A\) may be written

\[\frac{A(\x, \y, \z)}{(\x, \y, \z)} = \frac{(A\x, A\y, A\z)}{(\x, \y, \z)}\]

And its inverse, if one exists, can be written

\[A^{-1} = \frac{V}{AV} = \frac{A^{-1} V}{A^{-1} A V} = \frac{A^{-1} V}{V}\]

By expanding both the numerator and denominator in coordinates we get a matrix representation of the transformation. For example \(R_{xy} = \frac{\y}{\x} - \frac{\x}{\y} + \frac{\z}{\z}\) as a matrix is

\[R_{xy} = (1) \frac{\y}{\x} + (-1) \frac{\x}{\y} + (1) \frac{\z}{\z} = \begin{pmatrix} 0 & -1 & 0\\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix}\]

It is nice to think of \(AV/V\) as giving the procedure by which \(A\) acts on a vector: first it projects the vector into its \(V\) components, then it maps each of these to a new basis vector.

\[A \b{b} = \frac{AV}{V} \b{b} = \frac{AV}{V} (b_V V) = b_V (AV)\]

Or in coordinates,

\[[ (A \b{v}^i) \b{v}_i ] \cdot (b_j \b{v}^j) = b_i (A \b{v}^i)\]

If \(AV \sub \<W\>\), then we can expand it in matrix elements \(A_j^{\, i}\) in terms of the frames \(V\) and \(W\):

\[\frac{W}{W} A \frac{V}{V} = W (\frac{1}{W} A V) \frac{1}{V} = A_W^{\, V} \frac{W}{V}\]

Which in coordinates is

\[\b{w}^j (\b{w}_j \cdot A \cdot \b{v}^i) \b{v}_i = A_j^{\, i} \b{v}_i \b{w}^j\]

with \(\frac{1}{W} A V = A^V_W = A_j^{\, i}\) being the matrix ‘coordinates’ of \(A\) in the \(W\) and \(V\) frames.8

This is essentially the same as index notation, like \(A_{i}^{\, k}\), just with capital letters instead of lowercase ones. Basically we thinking of the indexes as explicitly labeling what frame they come from, rather than just being placeholders for summations over a sequence of numbers. This would not work if you thought of the indexes as labeling a vector space rather than a frame, because you really do need to keep track of a basis: for example, \(R_{xy} V\) and \(V\) describe the same vector space, but \(A_{\, R_{xy} V}^V\) is different than \(A_V^V\), because \((R_{xy})_{\, R_{xy} V}^V = \diag(1,1,1)\) while \((R_{xy})_{\,V}^V\) is the antisymmetric matrix shown above. So in a sense index notations have been frame notations all along. I prefer to conceptualize them as such.

If two frames span the same space, \(\< E \> = \< F \>\) then we can write \(F\) in terms of \(E\)

\[F = \frac{E}{E} F = (\frac{1}{E} F) E = EP\]

With \(P = \frac{1}{E} F\) as a change-of-basis matrix (I would rather just leave it as \(E^{-1} F\) but we should connect this to how it’s usually written). In coordinates this is

\[\b{f}^i = (\b{e}_j \cdot \b{f}^i) \b{e}^j = P_j^{\, i} \b{e}^j\]

So \(P\) is

\[P = \frac{1}{E} F = \b{e}_j \cdot \b{f}^i = P_j^{\, i}\]

Since \(F: \cal{I}_F \ra F = E\) and \(E^{-1}: E \ra \cal{I}_E\), it must be that \(P: \cal{I}_F \ra \cal{I}_E\). Given a vector’s components \(a_F \in \cal{I}_F\), we can use this \(P\) to write

\[\b{a} = a_F (EP)\]

(Strictly speaking that should be \(EP a_F\) to match up all the spaces right-to-left, but I’m not too concerned with that; I like to keep vectors as \(a_F F\) and not worry about ordering on the \(\cal{I}_F\) component.)

The inverse frame is

\[\frac{1}{F} = \frac{1}{F} \frac{E}{E} = (\frac{1}{F} E) \frac{1}{E} = P^{-1} E^{-1} = \frac{1}{EP}\]

Which in coordinates is

\[\b{f}_i = (\b{f}_i \cdot \b{e}^j) \b{e}_j = P_i^{\, j} \b{e}_j\]

(Note that \(P_i^{\, j}\) is \(P^{-1}: \cal{I}_E \ra \cal{I}_F\), the matrix inverse of \(P^i_{\, j}\).)

So we have

\[\b{a} = \frac{1}{F} \b{a} F = \frac{1}{PE} \b{a} (EP) = (EP) P^{-1} (\frac{1}{E} \b{a}) = a_E E\]

Similarly a matrix transforms as

\[\begin{aligned} A &= \frac{F}{F} A \frac{F}{F} \\ &= F (\frac{1}{F} A F) \frac{1}{F} \\ &= (EP) (\frac{1}{EP} A EP) \frac{1}{EP} \\ &= (EP) (P^{-1} \frac{1}{E} A E P) (P^{-1} E^{-1}) \end{aligned}\]

Extracting the matrix elements \(\frac{1}{F} AF = A_F^{\, F}\) gives

\[A_F^{\, F} = P^{-1} A_E^{\, E} P\]

This is all a bit messy, admittedly, but I think it is good to see some of the things that are often written in indexes written with frames instead. There is a certain logic to it, although it takes some getting used to.

I’ll mention a few more linear algebra things to show them in frame notation.

If an operator maps a space into itself, \(A: X \ra X\), we also have the operation of taking its trace by dotting the input and output vectors together.

\[\tr A = \x_i \cdot A \cdot \x^i = A^i_{\, i}\]

Sometimes this is written with a ‘double dot product’ to indicate that it takes two operators and contracts them on both components:

\[\tr A = A : I_X = A : \frac{X}{X} = A : \x_i \x^i\]

The fact that it is basis-independent follows from the fact that \(I_X\) is itself basis independent; writing \(I_X = = \x_i \x^i\) just reflects a choice of coordinates on the frame \(X\).

The trace of the projection operator \(I_X = X/X\) itself gives the dimension of the space it projects onto

\[\begin{aligned} I_X &= \frac{(\x^1, \x^2, \ldots)}{(\x^1, \x^2, \ldots)} \\ &= \x^i \o \x_i \\ \tr I_X &= \x^i \cdot \x_i \\ &= \x^1 \cdot \x_1 + \x^2 \cdot \x_2 + \ldots \\ &= \dim X \end{aligned}\]

More generally the trace of a transformation times its inverse is its rank, the number of terms in each frame:

\[\tr (A A^{-1}) = \frac{F}{E} : \frac{E}{F} = \b{f}^i \b{e}_j : \b{e}^k \b{f}_l = 1_{i=l} 1_{j=k} = \text{rank}(A)\]

After all \(A A^{-1} = \frac{F}{E} \frac{E}{F} = \frac{F}{F} = I_F\) and \(A^{-1} A = \frac{E}{E} = I_E\). The rank is the dimension of both of these spaces.


6. Singular Decompositions

If we are generally given a linear transformation \(A = F/E\), we can decompose whatever it acts on into its \(E\) and \(E_{\perp}\) components, with the \(E_{\perp}\) component being in the kernel:

\[\begin{aligned} A \b{a} &= \frac{F}{E} \b{a} \\ &= \frac{F}{E} (\b{a}_E + \b{a}_{\perp E}) \\ &= \frac{F}{E} (a_E E + a_{\perp E} E_{\perp}) \\ &= \frac{F}{E} (a_E E) + \cancel{\frac{F}{E} (a_{\perp E}) E_{\perp}} \\ &= a_E F \\ &= (\b{a} \cdot \b{e}_i) \b{f}^i \end{aligned}\]

Here \(E_{\perp}\) is a frame referring to the orthogonal subspace to \(E\). Even though we don’t have a basis for it, we can use it symbolically as if we did, and \(a_{\perp E}\) refers to the coordinates in that basis.

Similarly a frame can be split into a list of other frames, like

\[E = (E_X, E_{\perp X})\]

where we assume that creating frames as tuples of other frames works the same way it does with vectors \(E = (\x, \y)\). However the notation starts to break a bit here. We would like to implement \(E_X\), the “restriction of the frame \(E\) to the frame \(X\)”, with something like a projection, \(E_X \? \frac{X}{X} E\), and such that \(E = E_X + E_{\perp X} = \frac{X}{X} E + \frac{X_{\perp}}{X_\perp} E\). But this doesn’t really work, because, for instance, \(\frac{\x}{\x}(\x, \y) \? (\x, 0)\) gives a ‘singular’ frame (a frame which is not linearly independent), and \(\frac{\x}{\x}(\x, \y) + \frac{\y}{\y}(\x, \y) \? (\x, 0) + (0, \y) \? (\x, \y)\) requires the “\(+\)” sign to act in a way that is hard to make consistent with everything else.9

Maybe there is a way to get explicit algebra on frames to work in the same way that it works on vectors; I’m not sure. But it is still useful to think in frames, and their decompositions along other frames, because it gives a slightly more concrete way of writing things in linear algebra that are normally expressed in subspaces.

For example if \(E = E_X + E_{\perp X}\) then a linear transformation \(A = E/F\) factors as

\[A = \frac{F}{E} = \frac{AE_X}{E_X} + \frac{AE_{\perp X}}{E_{\perp X}}\]

if it is additionally the case that \(AE = AE_X + AE_{\perp X}\), that is, the two output frames are orthogonal, then the inverse inverts them separately:

\[A^{-1} \underbrace{=}_{\text{orthogonal}} \frac{E_X}{AE_X} + \frac{E_{\perp X}}{AE_{\perp X}}\]

We can use this to make the structure of a linear transformation \(A: V \ra W\) algebraically explicit. Suppose \(E \sub V\) and \(A\) is bijective on \(E\), so \(\ker A = E_{\perp}\). Writing \(n = \dim V\) and \(k = \dim E\), then we can factor $$A$ as

\[A = \frac{F}{E} + \frac{0^{\oplus n-k}}{E_{\perp}}\]

where \(0^{\oplus n-k} = \underbrace{(0, 0, \ldots)}_{n-k\text{ times}}\) is a ‘singular’ frame that describes the image of the kernel. We haven’t discussed singular frames, but they are valid objects, and it seems like the best way to write this

We can also add in a third term for the cokernel. Set \(m = \dim W\), and write

\[A = \frac{F}{E} + \frac{0^{\oplus n-k}}{E_{\perp}} + \frac{F_{\perp}}{\bot^{\oplus m-k}}\]

Where \(1/\bot\) is a symbol that I’m using to represent a ‘null’ frame that matches nothing: the ‘empty frame’, if you will. It is raised to the \((m-k)\) power because that is how many dimensions it is annihilating (I’m not sure if this is necessary, but it’s nice for bookkeeping.) We have to have a different symbol than \(0\) here, because it does not act the same as a zero frame in a denominator, as we will see in a second. You can think of \(\bot\) as being an empty frame, \(\bot = ()\), whereas \(0^{\oplus n-k} = (0, 0, \ldots)\) is a frame of zeroes.10

Here is perhaps a better way to write this. Write \(A_{\parallel}\) for \(F/E\), the ‘parallel part’ of \(A\) (as opposed to the orthogonal part). Then

\[A = A_{\parallel} + \frac{0^{\oplus n-k}}{\ker A} + \frac{\text{coker} A}{\bot^{\oplus m-k}}\]

I have written \(A_{\parallel} = F/E\) for the ‘non-trivial’ part of \(A\), the part that does something (corresponding to its nonzero singular values in its SVD, incidentally). Then I’m using \(\ker A\) and \(\text{coker} A\) as frames for their respective subspaces.

This decomposition roughly corresponds to the SVD of \(A\) (although we have not singled out the singular values). If \(A = U \Sigma V^T\) is the SVD, we might write it in frames as \(A = \frac{U \Sigma}{V}\). The nonzero singular values correspond to \(A_{\parallel}\), and the remaining projections onto the kernel and cokernel correspond to the other two terms. To fully recover the SVD we would need to also write out \(A\) as a list of vectors \(A = \frac{\b{f}^1}{\b{e}^1} + \frac{\b{f}^2}{\b{e}^2} + \ldots\), and then factor out the singular values as \(A = \sigma_1 \frac{\widehat{\b{f}^1}}{\widehat{\b{e}^1}} + \sigma_2 \frac{\widehat{\b{f}^2}}{\widehat{\b{e}^2}} + \ldots\). You can also join terms together if they share a singular value, e.g. \(A = \sigma_1 \frac{F^1}{E^1} + \sigma_2 \frac{F^2}{E^2} + \ldots\), which suppresses the degrees of freedom in picking bases for those frames.

Incidentally, the SVD tells us that it is always possible to pick the numerators and denominators in \(A = F/E = (\b{f}^1, \b{f}^2, \ldots)/(\b{e}^1, \b{e}^2, \ldots)\) to be simultaneously orthogonal. I haven’t yet thought of a way to see intuitively that this must be true.s


Now consider the pseudoinverse of \(A\). Only the non-trivial part \(A_{\parallel}\) is invertible. Inverting only this part, and setting the rest to zero, gives the Moore-Penrose Pseuodinverse of \(A\), which I have also written about here (I don’t care for the \(A^+\) notation so I’m only going to use it here):

\[A^+ = (A_{\parallel})^{-1} = ( \frac{\text{col} (A)}{\text{row} (A)})^{-1} = \frac{\text{row}(A)}{\text{col}(A)}\]

Incidentally this is why it corresponds to inverting only the non-zero singular values in the SVD: because it inverts onto \(A_{\parallel}\), the nonzero part of the operator.

Since the pseudoinverse invertibly maps \(\text{row}(A) \ra \text{col}(A)\), we can use it to construct projectors for each subspace:

\[\begin{aligned} I_{\text{row}(A)} &= (A_{\parallel}^{-1}) (A_{\parallel}) = \frac{\text{row}(A)}{\text{row}(A)} \\ I_{\text{col}(A)} &= A_{\parallel} A_{\parallel}^{-1} = \frac{\text{col}(A)}{\text{col}(A)} \\ I_{\text{ker}(A)} &= I_V - I_{\text{row}(A)} = I_V - A_{\parallel}^{-1} A_{\parallel} = \frac{\text{ker}(A)}{\text{ker}(A)} \\ I_{\text{coker}(A)} &= I_W - I_{\text{col}(A)} = I_W - A_{\parallel} A_{\parallel}^{-1} = \frac{\text{coker}(A)}{\text{coker}(A)} \end{aligned}\]

We can also talk about the generalized inverse of \(A\), which is the broadest way of thinking about what is meant by inverting \(A\). This consists conceptulaly of inverting all three terms separately:

\[\begin{aligned} A^{-1} &= (\frac{\text{col} (A)}{\text{row} (A)})^{-1} + (\frac{0^{\oplus n-k}}{\text{ker} (A)})^{-1} + (\frac{\text{coker} (A)}{\bot^{\oplus m-k}})^{-1} \\ &= \frac{\text{row} (A)}{\text{col} (A)} + \frac{\text{ker} (A)}{0^{\oplus n-k}} + \frac{\bot^{\oplus m-k}}{\text{coker} (A)} \\ &= A_{\parallel}^{-1} + \frac{\text{ker} (A)}{0^{\oplus n-k}} + \frac{\bot^{\oplus m-k}}{\text{coker} (A)} \end{aligned}\]

The kernel and cokernel have swapped roles. Now \(\text{coker}(A) \subset W\) is the set of vectors which are mapped to \(0_V\), since they have no preimage in \(V\), while \(\text{ker}(A) \subset V\) is the cokernel of \(A^{-1}\), consisting of the vectors that were all mapped to \(0 \in W\) by \(A\). However, the cokernel and kernel still act differently. The kernel vectors are all in the preimage, so they are all accessible. We reprsent this by dividing by zero.

But now we have a different interpretation: instead of saying that these vectors are inaccessible from \(A^{-1}\), we can think of them as all being accessible. The correct preimage \(A^{-1}(0_W)\), in a generalized inverse sense, is that it is all of the vectors in the kernel of \(A\). The \(1/0^{\oplus n-k}\) tells us that we would need \((n-k)\) additional pieces of data to describe the precise vector in the preimage, similar to inverting \(0 \times a = 0\) to get \(0^{-1}(0) \? a\) requires recovering the missing information of the value \(a\). We could have written \(0/\ker A\) and forgotten the \((n-k)\) information, and that would probably characterize \(A\) more correctly. But I like to keep it around because it elucidates the structure better.

The inverse cokernel behaves slightly differently than the kernel did. To correctly write the inverse \(A^{-1}\) we still want the image of \(\text{coker} A\) to be literally deleted, not mapped to zero: it is not even in the domain of the operator \(A^{-1}\). This is not how linear algebra typically thinks about it, but I think it is the cleanest approach. What we have constructed is \(A^{-1}(\text{im A})\), so it has no action on \(\text{coker} A\) whatsoever. If you want \(A^{-1}: W \ra V\) to exist, you kinda have to explicitly extend it to be defined on \(W\) as well. Of course, if you don’t care about this level of pedantry, you can replace \(\bot\) with \(0\) here without losing anything.

A quick example. Consider \(A: \< \x, \y \> \ra \< \b{a}, \b{b} \>\) given by \(A = \frac{\b{a}}{\x}\). The full expansion is

\[A = \frac{\b{a}}{\x} + \frac{(0)}{\y} + \frac{\b{b}}{\bot}\]

and the generalized inverse is

\[A^{-1} = \frac{\x}{\b{a}} + \frac{\y}{(0)} + \frac{\bot}{\b{b}}\]

Another interesting case is to let the denominator frame vary with a parameter, to see how the formulas ‘switch over’ when it becomes singular. Write

\[A = \frac{(\x , \x + c \y)}{(\b{a}, \b{b})}\]

whose action is

\[A \b{v} = A(v_a \b{a} + v_b \b{b}) = v_a \x + v_b (\x + c \y)\]

The inverse frame for \(c \neq 0\) is \((\x^* - \frac{1}{c} \y^*, \frac{1}{c} \y^*)\), so the inverse is

\[A^{-1} =\frac{(\b{a}, \b{b})}{ (\x, \x + c \y)} = \b{a} \o (\x^* - \frac{1}{c} \y^*) + \b{b} \o (\frac{1}{c} \y^*)\]

whose action is

\[A^{-1} (v_a \x + v_b (\x + c \y)) = v_a \b{a} + v_b \b{b}\]

When \(c = 0\), the action is to take both components to \(\x\):

\[A(v_a \b{a} + v_b \b{b}) = v_a \x + v_b \x\]

How does the inverse work? \(\lambda = 1/c \? 1/0\) can be thought of as allowing any possible value. The inverse looks like

\[A^{-1} = \b{a} \o (\x^* - \lambda \y^*) + \b{b} \o (\lambda \y^*)\]

Its action includes a free parameter that selects the actual preimage:

\[A^{-1} (v_a \x + v_b \x) = (v_a + v_b) \b{a} + \lambda (\b{b} - \b{a})\]

Which for the value \(\lambda = v_b\) becomes

\[A^{-1} (v_a \x + v_b \x) = v_a \b{a} + v_b \b{b}\]

I don’t know what use this is, but I think it’s a really nice way of looking at things, and everything seems to work out algebraically. It is probably the closest you can get to a true division by zero without actually changing the mathematics of your problem by inventing some structure that allows it (which is my complaint about a lot of the division-by-zero things out there, e.g. the Riemann sphere, meadows, etc).

Let me also mention that I did not invent this way of constructing inverses; it’s something that comes up in literature about the Moore-Penrose pseudoinverse, among other places. They usually write it in the form \(A^{-1} = A^+ + (I - A^+ A) \vec{\lambda}\), with \(\vec{\lambda}\) a vector of free parameters; \(I - A^+ A = I_{\ker A}\) is the projector for the kernel of \(A\). But I do prefer my frame notations for understanding it.

Anyway, there is much more that could be investigated about singular frames, but it gets rather confusing. Often it seems like there are some ‘missing’ algebraic operations that are needed to make sense of it For example, can you add two frames together? Does \((\x, \y) \oplus (\z) = (\x, \y, \z)\)? If so, then what does \((\x, \x)\) do? Thinking about questions like these made my head hurt, so I’m not going to look into it anymore today. But I’m convinced there’s some kind of ‘fluent’ calculus for all this, where every concept has a corresponding algebraic expression, and every expression corresponds to a meaningful concept. I just haven’t found it yet. So let’s move on.


7. Differentials

Frames work the same way on differentials, if you regard \((dx, dy)\) and \((\p_x, \p_y)\) as dual frames to each other. I think the best way to do this is to pick one symbol and use it for both. In this section I will use \(dx\) for differentials and \(1/dx\) for their inverses, partial derivatives (not total derivatives), corresponding to \(dx^i\) and \(dx_i\).11

\[\begin{aligned} \frac{df}{(dx, dy)} &\equiv (\frac{\p f}{\p x}, \frac{\p f}{\p y}) = (f_x, f_y) = f_{x, y} \\ \frac{df}{(dx, dy)} \cdot (dx, dy) &\equiv f_x \d x + f_y \d y = f_{x, y} (dx, dy) \end{aligned}\]

Admittedly \(f_{x,y} = (f_x, f_y)\) is pretty awkward. Ideally we would write \(f_{xy}\) in analogy with the vector version \(\b{a}_{xy}\) earlier, but unfortunately that notation is already taken by the second partial derivative, so \(f_{x,y}\) will have to do. All of this is a bit of a mess because the shorthand expression for derivatives should really be \(df_{dx}\), but even I can’t bring myself to do that.

If we write \(d \b{x} = (dx, dy, dz)\) as a symbol for the frame then this gives a literal algebraic meaning to the somewhat-common expressions \(f_{\b{x}}\) and \(df/d\b{x}\) for the gradient:

\[f_{\b{x}} = \frac{df}{d \b{x}} = (f_x, f_y, f_z) = \del f\]

So the gradient is the partial derivative with respect to the frame \(d \b{x}\), a single component of the geometric vector \(d f\). Note, writing \(d \b{x}\) here might be bit awkward because of the overlap with the unit vector \(\b{x}\). Usually it’s okay because you don’t use both objects at the same time. But an alternate and more unambiguous notation would be to use \(X=(x,y,z)\) and \(dX = (dx, dy, dz)\) for the differential version, and then \(df(X)/dX = df(x,y,z)/(dx,dy,dz)\) is pretty clean also. Regardless, when thinking with frames is we try to make all the notations “decomposition-invariant”: the same notations should be used for dealing with single vectors as for dealing with subspaces of more than one dimension.

We can put a frame in the numerator as well. Suppose \(\b{u} = (u, v) = (u(x,y,z), v(x,y,z))\) is a change of coordinates, for example one that parameterizes a 2d surface in 3-space. Then

\[\frac{d \b{u}}{d \b{x}} = \frac{(du, dv)}{(dx, dy, dv)} = \begin{pmatrix} u_x & u_y & u_z \\ v_x & v_y & v_z \end{pmatrix}\]

is the first derivative / Jacobian matrix (hate that name) of the coordinate transformation. These show up, for example, in line integrals:

\[\begin{aligned} \int df &= \int \frac{df}{(dx, dy, dz)} (dx, dy, dz) \\ &= \int (f_x, f_y, f_z) (dx, dy, dz) \\ &= \int \frac{df}{(du, dv)} \frac{(du, dv)}{(dx, dy, dz)} (dx, dy, dz) \\ &= \int (f_u, f_v) \frac{(du, dv)}{(dx, dy, dz)} (dx, dy, dz) \\ &= \int \frac{df}{d \b{u}} \frac{d \b{u}}{d \b{x}} d \b{x} \\ &= \int f_{\b{u}} \frac{d \b{u}}{d \b{x}} d \b{x} \end{aligned}\]

Today this is often written as \(\frac{\p(u, v)}{\p(x,y,z)}\) which is essentially equivalent, but as far as I know that is thought of as a shorthand, not an actual algebraic operation.

I have mostly not discussed exterior algebra to keep this from getting any bigger, but in this section I have to mention it. Frames and ratios of frames can be acted on with the wedge product, like \((\x, \y, \z) \^ (\x, \y, \z) = (\x \^ \y, \y \^ \z, \z \^ \x)\). The result is another frame of vectors, now drawn from \(\^^2 \bb{R}^3\) instead of \(\bb{R}^3\). As with a basis on \(\bb{R}^3\), the order in which we write the powers doesn’t matter, as long as we expand anything that multiplies the frame in the same order. In the case of differentials this looks like \(d \b{x} \^ d \b{x} = d \b{x}^{\^ 2} = (dx \^ dy, dy \^ dz, dz \^ dx)\). These exterior powers give a simple algebraic interpretation for many operations of multivariable calculus, such as reparameterizing a surface integral:

\[\begin{aligned} \iint dA &= \iint du \^ d v \\ &= \iint d \b{u}^{\^2} \\ &= \iint \frac{d \b{u}^{\^2}}{d \b{x}^{\^2}} d \b{x}^{\^2} \\ &= \iint \big[ \frac{du \^ dv}{dx \^ dy} dx \^ dy + \frac{du \^ dv}{dy \^ dz} dy \^ dz + \frac{du \^ dv}{dz \^ dx} dz \^ dx\big] \\ &= \iint \big[ (u_x v_y - u_y v_x) (dx \^ dy) + (u_y v_z - u_z v_y) (dy \^ dz) \\ &+ (u_z v_x - u_x v_z) (dx \^ dz) \big] \\ \end{aligned}\]

In the special case where \(d \b{u}\) and \(d \b{x}\) are both \(k\)-frames then \((d \b{u}/d\b{x})^{\^k}\) is the (pseudoscalar) Jacobian determinant. Otherwise the ratio gives some vector of wedge products that cover all the ways of projecting the numerator onto the denominator. In any case, the operation is just rewriting one frame of two-forms in terms of another, really just a rote application of linear algebra when expressed in terms of the pseudoinverse.

Notice that in the above we replaced \(dA\) with \(d \b{u}^{\^2}\). This does not require actually having a coordinate system for the surface of integration: since we know the integral is two-dimensional we can simply assume that there exist two coordinates for the surface and write the integral out in terms of them. We are also free to invent a normal coordinate \(n\), such that \((u, v, n)\) forms an orthogonal coordinate system in the neighborhood of the surface, and \((du, dv, dn)\) forms an orthogonal basis for the vectors on the surface. Then

\[d_{uv} = du \frac{1}{du} + dv \frac{1}{dv} = d \b{u} \frac{1}{d \b{u}}\]

is a projection onto the surface (normally written \(d \b{u} \frac{1}{\p_\b{u}}\)) and

\[d_n = dn \frac{1}{dn} = d - d_{uv}\]

is a projection off the surface. These are equivalent to \(I_{xy}\) and \(I_z\) on vectors, but when we write differentials as projections then it’s better to use the \(d\) notation to imply that they still are, after all, derivative operators. For example

\[d_{uv} f = f_u du + f_v dv = I_{uv} (df)\]

If \((u, v)\) is the coordinate system for a surface \(\sigma\), then this is the (classical) covariant derivative for the surface. It gives the gradient of \(f\) but projected onto the surface (which is not very interesting because it’s just acting on a scalar, but still). Line integrals of \(f\) that remain on the surface can then use this object without knowing about any of the other variation of \(f\) along the orthogonal \(n\) direction:

\[\int_{\gamma \in \sigma} d_{\sigma} f = \int_{\gamma \in \sigma} d_{uv} f = \int_{\gamma \in \sigma} f_u du + f_v dv\]

The \((u,v)\) coordinate system does not know that the orthogonal \(n\) coordinate exists, so calculus has to work the same way without it. The only way you can “detect” the surface is if you locate some non-trivial topology in which the \((u,v)\) coordinates double back on themselves. Indeed, the symbol \(d\) in \(df\) refers to the overall differential of \(f\), but really it is just the differential with respect to the coordinates we know about: \(d \equiv d_{xyz}\), say. 12

Now I’m going to briefly mix the vector notations and differential notations in order to demonstrate the covariant derivative of tensor fields in terms of frames. Let \(\b{a} = \b{a}_X X\) be a vector field in space and \(U\) be the tangent frame of some surface, as above. Then \(\b{a}_{U} = \b{a}_U U = \b{a}_X (X/U) U\) is as above. We can take the covariant derivative of this with respect to the surface frame \(U\):

\[\begin{aligned} d_U \b{a}_U &= d_U (a_U U) \\ &= d_U (a_U) U + a_U d_U (U) \\ &= (\p_i a_j) du^i \b{u}^j + a_j (\p_i \b{u}^j) du^i \\ \end{aligned}\]

The two terms here correspond to the fact that a vector field defined on a surface varies in space as you move around the surface. The first term corresponds to the “naive” partial derivative, which differentiates only the coordinates of \(\b{a}\) in terms of the surface coordinates \(U\). The second term is the differential of the vector field itself, which also changes as you move around the surface. In differential geometry this notation quickly becomes annoying, because the only basis for defining the unit vectors \(\b{u}^j\) that makes any sense is either the differentials \(d\b{u}\) or the derivatives \(1/d\b{u}\). So a more normal way to write this is

\[\begin{aligned} d_U \b{a}_U &= (\p_i a_j) du^i du^j + a_j (\p_i du^j) du^i \\ &= (\p_i a_j) du^i du^j + a_j (\Gamma_{ik}^j du^k) du^i \end{aligned}\]

Where we’ve relabeled the indexes and used the Christoffel symbol \(\Gamma_{ik}^j du^k = (\p_i du^j) du^k\) for the derivative of the frame with respect to itself. Which I find much harder to read!

One can similarly take the derivative of a tangent vector field \(d_U (\b{a}_U) = d_U (a^U \frac{1}{U})\), or any higher-degree tensor. Although my presentation here is a bit muddled because of jumping between \(d\b{u}\) and \(U\), the reason I mention it is that I find the whole expression so much easier to expand without indices, in terms of frames and the pseudoinverses which project everything onto the surface again:

\[d_U \b{a}_U = (d_U a_U) U + a_U (d_U U)\]

In particular, it allows you to do calculus with vector fields without having to immediately write them out in a basis of derivatives or differentials.

Another interesting application of calculus with frames is the case of Lagrange multipliers (see this other article for a more detailed exposition):

Suppose you have a set of constraints \(G_{\perp}(\b{x}) = (g_1(\b{x}), g_2(\b{x}), \ldots, g_k(\b{x}))\) in \(n\)-dimensional space. The surface \(G_{\perp}(\b{x}) = \vec{C} = (c_1, c_2, \ldots, c_k)\) gives a partial coordinate system on the space: given \(k\) values for the constraints you have eliminated \(k\) degrees of freedom, defining an \((N{-}k)\)-dimensional surface of points which satisfy the constraints, which we call \(G\). (The symbol \(G_{\perp}\) for the constraints is of course because they define the frame perpendicular to \(G\), rather than \(G\) itself.) Then we can talk about \(d_{\perp G} = dg_1 \frac{1}{dg_1} + dg_2 \frac{1}{dg_2} + \ldots\), the derivative with respect the constraint equations, as well as \(d_G = d - d_{\perp G}\), the derivative with respect to the surface \(G\). The important part is that we don’t have to actually have coordinates for the surface in order to compute this: knowing the ambient space and an expression for \(d_{\perp G}\) is enough.

Now suppose you want to maximize a function \(f(\b{x})\) subject to these constraints, that is, given a particular value of \(\vec{C}\) that defines the surface \(G\), you want to find the maximum value of \(f\) on \(G\). Since we already know how to compute derivatives on this surface, we can simply use the usual calculus rule that maxima are points at which the derivative is zero, then expand into \(d \x\) coordinates.

\[d_G f = (d - d_{\perp G}) f = \frac{df}{d \x} - \frac{d f}{d G_{\perp}} \frac{dG_{\perp}}{d \b{x}} = 0\]

But this means that at the solutions,

\[\frac{df}{d \x} = \frac{d f}{d G_{\perp}} \frac{dG_{\perp}}{d \x} = \vec{\lambda} \frac{dG_{\perp}}{d \x}\]

The coefficient is \(\vec{\lambda} = \frac{d f}{d G_{\perp}}\), what is normally called the vector of Lagrange multipliers corresponding to the constraints. Conceptually they represent the partial derivatives of \(f\) with respect to the frame spanned by the constraints; overall the equation says that at the solutions, the entire derivative of \(f\) is orthogonal to the surface \(G\), which is why its projection onto the surface is zero. Actually computing the value of \(\vec{\lambda}\) is messy because the \((dg_i)\) differentials in the \(dG_{\perp}\) frame do not have to be orthogonal to each other, meaning that \(df/dG_{\perp} \neq (df/dg_1, df/dg_2, \ldots)\), so a full pseudoinverse of the \((dg^i)\) differentials is needed. On the other hand the \(G\) and \(G_{\perp}\) coordinate systems are orthogonal, which is why it’s possible to separate the derivative \(d = d_G + d_{\perp G}\) cleanly.

I find this idea of arbitrarily factoring a space into orthogonal coordinate systems, and then doing calculus on those coordinates without writing them down explicitly, to be very nice to work with. Similar to how frames allow us to write vector equations where each basis element is free to be multi-dimensional, our approach to calculus is to treat individual coordinates \((x)\) as special cases of tuples of coordinates \((x,y,z)\), so that the same equations can be used on both. In both cases this means that certain properties no longer always hold: for example one-forms have \(d x \^ d x = 0\) but it’s not necessarily the case that \(d \b{x} \^ d \b{x} \neq 0\) for frames of one-forms. So all of our techniques have to be generalizes to handle the case of \((k > 1)\)-frames. But it’s worth it: a great deal of mathematical knowledge is just duplicating the same concepts for \(k=1\) and \(k > 1\) because the notations aren’t expressive enough to handle both cases at once. Frames follow philosophically from the idea that we should do something about that.

(Of course a great deal of mathematics, e.g. category theory, is concerned with factoring out commonalities across subjects at a higher level of abstraction, and all of the tools I’ve described here can be found in various parts of higher math, particularly differential geometry. My claim is that actually there are some very basic ways of refactoring things like this which all of mathematics would benefit from: actually many people are inventing the same things over and over in different notations because things are not sufficiently unified in their foundations. I am not aware of anyone else trying to do this at the elementary level of linear algebra and calculus; I’d be very interested to learn of any similar approaches.)


The transformation laws for differential forms are the same as those for frames and inverse frames that I discussed earlier, but just to connect things that might be familiar I’ll rehash them in differential notation here.

If space is parameterized by coordinates \(\b{x} = (x^1, x^2, \ldots)\), then the frame is the differentials

\[d\b{x} = (dx^1, dx^2, \ldots)\]

and the inverse frame is

\[\frac{1}{d \b{x}} = (\frac{1}{d x^1}, \frac{1}{dx^2}, \ldots)\]

Such that the partial derivative operators are given by \(d/d\b{x} = (\p_{x^1}, \p_{x^2}, \ldots) = \p_{\b{x}}\). Under a change of coordinates \(\b{u}(\b{x})\), the two change with opposite variance.

\[\begin{aligned} d \b{u} &= \frac{d \b{u}}{d \b{x}} d \b{x} \\[1em] \frac{1}{d \b{u}} &= \frac{d \b{x}}{d \b{u}} \frac{1}{d \b{x}} \\ &= (\frac{d \b{u}}{d \b{x}})^{-1} \frac{1}{d \b{x}} \end{aligned}\]

For example, if \((u, v) = (x, x+y)\), then their differentials are \((du, dv) = (dx, dx + dy)\), and the dual basis is

\[\begin{aligned} \frac{1}{du} &= \frac{1}{dx} - \frac{1}{dy} \\ \frac{1}{dv} &= \frac{1}{dy} \end{aligned}\]

Such that \(du (1/du) = 1\) and \(du(1/dv) = 0\), etc.

This is the reason that derivatives and differentials have opposite variance: one is a numerator and the other is a denominator. Which one is which is somewhat arbitrary. Normally in differential geometry it’s standard to think of the partial derivatives as the basis for “vectors” (I think since the tangent space is easier to define intrinsically?) and then the differential forms are the covectors, their dual space. In that case you would say that something that changes like a vector is covariant while something that changes like a differential is contravariant. But it doesn’t really matter which is which. As far as I can tell everything is the same if you swap the numerators and denominators. The only time it makes a difference is when you want to replace dividing by a vector \(\b{a}/\b{b}\) with dotting with a vector \(\b{a} \cdot \b{b}^*\), and we are not doing that with differentials at all here; everything is intrinsic to the linear algebra itself.

In any case I think the interpretation as numerators and denominators is much simpler than the notions of covariance and contravariance. Of course they’re of opposite variance; one is a numerator and the other a denominator! And it makes it clear why the combination of the two forms an intrinsically coordinate-invariant object: all of the variance simply cancels out.

\[df = \frac{df}{d \b{x}} d \b{x} = f_{\b{u}} \frac{d \b{u}}{d \b{x}} \frac{d \b{x}}{d \b{u}} d \b{u} = \frac{df}{d \b{u}} d \b{u} = df\]

It’s all just linear algebra. But like, actual algebra where you can just cancel things out? Mostly.


8. Conclusion

This concludes my long-winded narrative of how to rewrite things in terms of frames. Let me add that I am certainly not convinced I’m doing things in the best way possible here. A lot of it feels clunky or confusing, and it seems like there are some operations hinted at that I’m missing. The dream is to get to a point where a lot of multivariable calculus manipulation follow from rote cancellations like in high-school algebra, or things like that—but it’s definitely not quite there yet.

Still, I’m convinced there’s something here. There are too many things that work out for. The act of projecting a vector onto a frame is as fundamental as projecting it onto a single coordinate. And in many ways, the algebra behaves the same. The reason for using a division notation at all, for that matter, is because in many ways it really does act like division: if you rescale the frame by a coefficient \(c\), the coordinates divide by \(c\).

I am very intrigued also by how much frames sorta act like numbers. Combining vectors into a frame acts in some places like multiplication. Linear transformations act like ratios of frames. Free parameters in inverses act like division by zero. Etc. It is all cute to not be meaningful, yet too confusing to crisply articulate a way of doing arithmetic on it without keeping track of the precise index expression that you’re referring to. Maybe there’s a way to fix this, but I haven’t found it yet.

Although generalizing from vectors to frames adds complexity in some places, it also seems to reveal a big symmetry that underlies a lot of linear algebra: that most of the things we do with it are somewhat agnostic as to whether the individual directions in our vector spaces are actually one-dimensional. Decompositions like \(\b{a} = \b{a}_X + \b{a}_{\perp X}\) work fine regardless of the dimensionality of the components. Often I get the impression that the choice to view a particular system as \(n\)-dimensional is a significant choice of coordinate system, just like how defining the \((\x, \y, \z)\) axes is, and a ‘covariance’ with respect to this choice is going to be necessary to correctly reckon with the its applications in (among other places) physics. (You have no choice about how to do this in the normal way that linear algebra is formalized over a particular field; however, I think this is up for refactoring if necessary.) It is also necessary to solve my ongoing quest to make sense of ‘fractional’-dimensional objects; for instance a vector space of dimension \(1/2\) is probably going to be equivalent to a vector space of dimension \(1\), but “measured” in a basis of dimension \(2\). Something like that. I don’t know yet! But I like to think about it.


  1. One can instead think of \(I_X\) as actually erasing the third component, such that it is a homomorphism \(\bb{R}^3 \ra \bb{R}^2\) like \(I_X (a_x, a_y, a_z)^T = (a_x, a_y)\). Still another option is to interpret \(I_X\) as a projection onto the quotient, \(\bb{R}^3 \ra \bb{R}^3 / \< \z \>\), such that \(I_X (a_x \x + a_y \y + a_z \z) = a_x \x + a_y \y + \< \z \>\). These are all isomorphic in linear algebra, but they are distinctly different at the ‘type’ level, and generalize differently (I presume). We will stick with the version I have described, though, because I want to keep everything concrete and familiar. 

  2. The direct sum operation \(\oplus\) acts more like a product than a sum (and, I understand, is equivalent for finite-dimensional spaces to the direct product \(X \times Y\)). It would be most accurate to explicitly write sense to write \(I_{x \oplus x}\), but that’s unwieldy. Another option is \(I_{x,y}\), since in many cases commas are used to represent elements of direct sums, e.g. \((v_x, v_y) \in \< x \> \oplus \< y \>\), but \(I_{xy}\) is unambiguous enough so I haven’t seen a reason to switch. 

  3. Sometimes this operator is called called the ‘rejection’, but I don’t like that name because it’s hard to use in a sentence. \(I_X\) is the projection onto \(X\), so \(I_{\perp X}\) is the… rejection… off of… \(X\)? There’s not really a good way to say it. Calling \(I_{\perp X}\) the ‘rejector’ for \(X\) works, however. 

  4. An alternative notation for \(I_{\perp X}\) might be \(I_{V/X}\), since the quotient space \(V/X\) is isomorphic to \(X_{\perp}\). One advantage of this is that it makes clear what \(X_{\perp}\) is perpendicular with respect to. Also, when projectors are written out using basis vectors like \(I_{xyz}\), the division symbol seems to helpfully invert the implied ‘multiplication’ operation inside \(xyz\), like \(I_{yz} = I_{xyz/x}\). On the other hand, one normally thinks of elements of \(V/X\) as being cosets of elements modulo \(X\), rather than just regular elements of \(V\), and although they are isomorphic, they are distinctly different. I haven’t been able to decide if this is worth it. Still another notation might be \(I_{\perp X} = I_{V \ominus X}\), where \(\ominus\) is interpreted as a formal inverse to the direct sum \(V = X \oplus X_{\perp}\). 

  5. Aside: it is possible to write down expressions with the projectors for subspaces which resemble set algebra. For example, \(I_{xyz} = I_{xy} + I_{yz} - I_{xy} I_{yz}\) resembles the inclusion-exclusion of sets \(A = \{ x, y \}\) and \(B = \{ y, z \}\): \(I_{A \cup B} = I_A + I_B - I_{A \cap B}\). However, this gets messy as soon as you try it on more complicated bases. For instance \(I_{x}\) and \(I_{x+y}\) do not even commute as operators. Also, \(I_{xy} I_{yz} = I_y\) must hold when \(I_{xy}\) is replaced with \(I_{x+y, x-y}\), but then it no longer looks like a simple intersection. I think there is something interesting here, but it it is too complicated to explore in this article. 

  6. Note, there are several things out there called “frame” and they’re slightly different. This concept is most similar to \(k\)-frames and moving frames, and less similar (but more important than) what Wikipedia currently describes on the Frame (linear algebra) article, which is instead a generalization of a basis to be overdetermined (to contain more basis vectors than the dimension). Although this is a useful concept, it is more useful most of the time to talk about linearly independent frames, so if I want to talk about one with that restriction relaxed I would add a qualifier like ‘singular frame’, since the associated matrix is singular, i.e. non-invertible. (Strictly speaking the word ‘singular’ only applies to square matrices but I like to use as a term for all non-linearly-independent frames, because ‘not full rank’ is a terrible term.) 

  7. This is the part that I got really stuck on a few years ago… it is morally correct, ish, but I don’t have a good notation for it. 

  8. The expression \(\frac{1}{W} AV\) seems to break the rule of denominators contracting with numerators, since \(AV\) is two numerators in a row. This is unfortunate. It would be better if we always wrote linera transformations as ratios like \(A=F/E\) to symbolize the fact that they have an input and output component. 

  9. It feels like there must be an elegant way to do this, but I haven’t found it yet. 

  10. I can’t really justify this notation; it just feels right. By the way, \(\bot\) here is inspired not so much by the perpendicularity symbol, actually, but rather by ‘bottom types’ in type theory, which are types with no members (although it’s convenient that it makes sense without this). I vaguely recall getting the notion from here, but I can no longer remember why. Anyway, I can’t see a way around using it. It is curious that there are two kinds of zero involved here. 

  11. It does not seem to matter which one you pick as the numerator and denominator, as far as I can tell—similar to how index notation / Ricci calculus doesn’t care about your convention for numerators vs. denominators. The only place it would matter is if you were using the ‘naive’ (one-dimensional) pseudoinverse division \(1/\x = \x / \| \x \|^2\), but with differentials you don’t want to do that, because you have to always invert them using the metric. 

  12. A trivial example is that \(f(x) = ax\) can also be thought of as having an \(a\) dependence, if we like, which means \(d_x f = f_x dx\) is just restriction of \(d_{x,a} f = f_x dx + f_a da\). It could also have a \(b\) dependence, with \(f(x,b) = abx\) evaluated at \(b= 1\). We want to use notations that always leave such interpretations open to us. This is not trivial, either: very many mathematical proofs proceed by viewing an object as a projection out of a larger object. An example that comes to mind is adding variables to integrals to perform Feynman’s integration trick (e.g. integrating \(\int \frac{\sin x}{x} \d x\) by solving \(I'(a) = \p_a \int e^{ax} [\frac{\sin x}{x}] dx\), then solving for \(I(a) = \int I'(a) da\), then setting \(a = 0\)). This seems to be a common theme when thinking in frames: we try to think of all mathematical objects as being viewed through projections onto some known coordinate system, so any equation like \(df\) that we write is really interpreted as being relative to a projection like \(d_{xyz} f\), leaving open the possibility that there is other information about \(f\) which we are ignoring.