A **vector space** over some scalar
domain is an Abelian additive group on which the scalar domain has a linear multiplication. This makes it possible to define the
vector space's dual, which is the collection of linear maps from the vector
space to its scalars; it is then straightforward enough to demonstrate that this
collection naturally supports an Abelian addition, under which it forms a group,
and a linear multiplication by scalars, making it also a vector space. This is
known as the **dual** of the original vector space.

Given a sub-set of the vector space, we can construct the sub-set's
**span** as its closure under multiplication by scalars and
addition among its thus-scaled members. If any member of a sub-set of the
vector space is in the span of the rest of the sub-set, the sub-set is said to
be **linearly dependent**; conversely, if no member is in the span
of the rest, the sub-set is called **linearly independent**. In a
linearly dependent sub-set, leaving out a member that is in the span of the rest
doesn't change the span of the whole; in a finite subset, it is thus always
possible to find a linearly independent sub-subset by repeatedly chosing a
member to leave out. When a finite subset's span is the entire vector space, a
linearly independent sub-subset of it is known as a **basis** of
the vector space. It is possible to show that every basis of a vector space
(that has at least one finite basis) has the same number of members: the number
in question is known as the dimension of the vector space; a vector space with
dimension n is described as n-dimensional. If *no* finite sub-set of a
vector space spans it, the vector space is described as infinite-dimensional.

Vector spaces are widely used in modelling physical systems since, at least to a high degree of accuracy, much of physics conforms to the character of vector spaces. In particular, a computer screen or a page of a book is well-modelled as a finite region of a two-dimensional vector space; the room in which I am sitting, the interior of a single cell and the galaxy we inhabit are all well-modelled as portions of a three-dimensional vector space; and the time-evolution of the contents of each of these regions is well-modelled by a four-dimensional vector space.

In three dimensions, there is a formal multiplication that can be performed
which combines two vectors to produce a third. In due course I'll show how this
is really something else in a seductively misleading disguise: but first let's
see it as it's normally introduced. The easiest three-dimensional vector space
to describe is {lists ({scalars}:|3)} = {[x,y,z]: x, y, z are scalars} with
addition defined by [x,y,z]+[a,b,c] = [x+a,y+b,z+c] and scalar multiplication by
k.[x,y,z] = [k.x,k.y,k.z]. The outer

vector product is then defined by

- [x,y,z] ^ [a,b,c] = [y.c−z.b, z.a−x.c, x.b−y.a]

and it will rapidly be apparent that p ^ q = −q ^ p for any
vectors p and q in our space: i.e. ^ is anti-symmetric. There is also
an inner

product defined on vectors which is trivially symmetric,
producing a scalar result:

- [x,y,z] * [a,b,c] = a.x +b.y +c.z

and it can readily be shown that there is a somewhat intimate relationship between these two products. [Indeed, it turns out that there is an algebra – the quaternions, similar to the complex numbers only more so – which embraces the two; it was, indeed, the area of study (along with the physics of electromagnetism) which first led mathematicians to formulate the notion of vectors as something transcending their components.] For example, for any vectors p, q and r (feel free to verify that):

- (p^q)*r = p*(q^r)
- (p^q)^r = (p*r).q −(q*r).p

Now, that is all very well for lists of three scalars: but how can it
be generalised to other vector spaces ? Clearly, if we have a three-dimensional
vector space, V, and a basis (V:b|3) of it, we can use this to establish a
linear isomorphism between V and {lists ({scalars}:|3)}, which we can then use
to pull back

our products into V: however, we are then bound to ask how
the result will depend on our choice of b.

Now, * combines two vectors to produce a scalar; it's trivially linear in each of the two vectors combined, so it can be construed as a linear map from the vector space to its dual; it maps the first vector to the linear map which maps the second vector to their inner product,

- (dual(V): ({scalars}: p*q ←q |V) ←p |V)

Any linear map from V to its dual can, likewise, be construed as an
inner product; when such a (dual(V): f |V) satisfies f(p,q) = f(q,p)

for
all p, q in V, it is described as symmetric; when it satisfies f(p,p) > 0
or p = 0

for all p in V, it is described as positive-definite. It can be
shown that *any* positive-definite symmetric linear map (dual(V): f |V)
can be encoded, by a suitable choice of basis b of V, as a pull-back of * as
defined on {lists ({scalars}: |3)}. In the tensor notation, this is encoded by
writing f as sum(: q(i)×q(i) ←i |3) with (dual(V): q |3) being a
basis of dual(V) dual to b, defined by q(i)·b(j) being 1 if i = j,
otherwise 0; this encodes our isomorphism between V and {lists ({scalars}:|3)}
as

- (V: sum(: b(i).h(i) ←i |3) ← ({scalars}:h|3) :), with inverse
- (: (: q(i)·p ←i |3) ←p |V).

Then f(p,r) = sum(: (p·q(i)).(q(i)·r) ←i |3) is exactly the pull-back of * via these isomorphisms, enabling us to write f = sum(: q(i)×q(i) ←i |3), using the tensor product ×. Indeed, * itself can be written in this form using the standard basis [1,0,0]←0, [0,1,0]←1, [0,0,1]←2 of V = {lists ({scalars}:|3)} with dual q = (dual(V): (: p(i) ←p |V) ←i |3).

In this light, let's look at what ^ pulls back to. Given its intimate relationship with *, we must allow that it may depend on our choice of basis, i.e. of inner product. It is not hard to identify ^ with the tensor

- w = sum(: sign([i,j,k]).q(i)×b(j)×q(k) ←[i,j,k] :{permutations of [0,1,2]}), with
- p^q = p·w·q

but it is not so easy to see what significance we should attach to this. Now, it happens that we've diagonalised *'s pull-back as f = sum(:q×q:), so its determinant will be the linear map from 3-way antisymmetrised V⊗V⊗V, to its dual, obtained by linear extension from q(0)×q(1)×q(2) = f(b(0))×f(b(1))×f(b(2)) ← b(0)×b(1)×b(2). Since b and q are dual, this makes it possible to write det(f) as

- det(f) = wedge×wedge, with
- wedge = sum(: sign([i,j,k]).q(i)×q(j)×q(k) ←[i,j,k] :{permutations of [0,1,2]})

which we can use to re-express p^q as the result of applying f's inverse to f(p^q) = p·wedge·q. Given def(f) = wedge×wedge, we can describe wedge as a square root of det(f); given that the 3-way antisymmetrised V⊗V⊗V is one-dimensional, this square root is unique up to sign; so (aside from its sign) it won't depend on our choice of basis, and it fully determines the action of ^.

The tensor algebra allows us to form an antisymmetric product of two members of V; this gives us an antisymmetric member of V⊗V. As a whole, V⊗V is 9-dimensional, since V is 3-dimensional; but its antisymmetric sub-space has dimension 3; in effect, wedge provides us with an isomorphism between this sub-space and dual(V), while f is an isomorphism between V and dual(V). Composing wedge with f's inverse, we obtain an antisymmetric product which combines two members of V and yields a member of V.

See also: the three-dimensional vector differential operators.

It is interesting to note that, in two dimensions, an iso (dual(V):f|V) gives us det(f) as an iso between antisymmetrised V⊗V and antisymmetrised dual(V)⊗dual(V); its square root will give us an antisymmetric member of dua(V)⊗dual(V); and f itself is a member of dual(V)⊗dual(V). In even dimension, an iso (dual(V):f|V) can indeed be antisymmetric, so it's meaningful to ask whether there's an f for which f×f = det(f).

In general, an antisymmetric iso (dual(V):f|V) with V two-dimensional is just u×v −v×u for some basis [u,v] of dual(V). If [m,n] is the basis of V dual to this, so v(n) = 1 = u(m) and v(m) = 0 = u(n), we have f(n) = u and f(m) = −v. Then det(f) maps m×n −n×m to −v×u +u×v = f, so det(f) = f×f; every antisymmetric 2nd rank tensor in two dimensions is a square root of its own determinant. The space of such tensors is, of course, one dimensional.

Geometry describes any two vectors in terms of a triangle, of which each is a side, in the two-dimensional plane they span. The third side is the difference between the two vectors. It is now time to consider how the two vector products, inner and outer, relate to the standard geometric properties of this triangle; its area and the angles in its corners. We already have the metric telling us the lengths of the sides; each vector v has length √(v*v). On the other hand, for two vectors, u and v, what geometric significance should we attach to v*u and v^u ?

Since our two vectors span a two-dimensional plane, and we have plenty of liberty in chosing an isomorphism between V and {lists ({reals}:|3)}, it suffices to look at a sufficiently general pair of vectors in two dimensions. Both * and ^ are bilinear, i.e. scaling either u or v merely scales v*u or v^u by the same factor, so we can divide each by its length without losing any information about geometric significance. Our choice of isomorphism can use one of our two (by now unit) vectors as a basis member; and taking one other basis member in the span of our two vectors ensures that our two vectors have no component in the direction of the remaining basis vector. Thus we can suppose one of our vectors is [1,0,0] and the other, making an angle t with it, is [Cos(t),Sin(t),0]. We can even presume that t is between zero and a half turn (otherwise, replace the third basis member with its negation). Thus it suffices to see that

- [1,0,0] * [Cos(t),Sin(t),0] = Cos(t)
- [1,0,0] ^ [Cos(t),Sin(t),0] = [0,0,Sin(t)]

From the latter (and some basic trigonometry) we can infer that (in
general, even when their lengths aren't 1) the length of v^u is, give or take a
sign, the area of a parallelogram whose sides are v and u; this is twice the
area of the triangle I first introduced, with v and u as sides. The direction
of v^u is perpendicular both to u and to v. Note that ^ is sensitive to
orientation; [1,0,0]^[0,1,0] = [0,0,1] but the other Cos(t) = 0 case,
[1,0,0]^[0,−1,0] = [0,0,−1], is in the opposite direction; if you're
looking at a the two vectors from such a position that the first is on the right
and the second on the left of an angle less than a half turn, then their outer
product is pointing *at* you, rather than away from you.

It is of interest, at least to me, that none of this depends, in the least, on our choice of unit of angle.

Written by Eddy.