# Looking for a clear definition of the geometric product

In brief: I'm looking for a clearly-worded definition1 of the geometric product of two arbitrary multivectors in $\mathbb{G}^n$.

I'm having a hard time getting my bearings in the world of "geometric algebra", even though I'm using as my guide an introductory undergraduate-level2 book (Linear and geometric algebra by Macdonald).

Among the general problems that I'm running into is that most definitions and theorems that I find (either in this book, or online) seem to apply to some multivectors (e.g. to $k$-vectors, or to blades), not all. Sometimes it is not clear to me whether a definition or result refers to all multivectors in $\mathbb{G}^n$ or only to a distinguished subset (e.g. blades), since these definitions/theorems are expressed in terms the word "vector". This leads to the pervading doubt as to whether this word "vector" is being meant as synonymous with "multivector"—i.e. an object in the so-called "vector space $\mathbb{G}^n\;$")—, or with "$1$-vector", or with "$k$-vector", or something else entirely.

(Hence the specification "clearly-worded" in my question above. A more accurate specification would have been "unambiguously-worded", but it would have been puzzling on first encounter.)

Case in point is the definition of the geometric product in $\mathbb{G}^n$. Macdonald gives a very partial definition of this product for "vectors" (and only in $\mathbb{G}^3$)3, but far as I can tell Macdonald never defines this product in general, even though he uses it freely throughout much of the book! I find this astonishing, to put it mildly. But, please correct me if I'm wrong.

1In his answer below John Macdonald writes "I do not think it possible to give a quick definition of the general geometric product." In light of this remark, I want to stress that succinctness is not among the requirements in my specifications what I'm looking for.

2The original version of this post incorrectly described this book as being written for "high-school students", but the author pointed out this error in his answer below. I apologize for the (now-amended) inaccuracy.

3 On p. 82, Macdonald gives a definition for the geometric product of two $1$-vectors in $\mathbb{G}^3$, and later explicitly states: "We have defined the geometric product of two vectors, but not for example, the geometric product of a vector and a bivector. This will be taken up in the next chapter, where we will learn to take the geometric product of any two multivectors." As far as I can tell, however, the "next chapter", which is called simply $\mathbb{G}^n$, never fulfills this promise. Or at least, it never gives a definition for the geometric product of any two multivectors in $\mathbb{G}^n$.

• As an aside, let me add that in my (admittedly very brief) acquaintance with "geometric algebra" I have gotten the impression not only that it's a field is plagued with an excess of unclear wording (as described in my post), but also that it is relegated to some sort of "alternative math" ghetto. I.e. the field is kept alive by a small but feisty fringe of diehards. I wonder if these two "first impressions", to the extent that they are correct, are related somehow. Does the sheer complexity of the geometric algebra formalism necessarily keep it outside of the "mainstream" of math education? – kjo Jul 16 '13 at 13:08
• I just went to fetch my copy of L&GA and it has a section (6.1, page 93) on the geometric product in $\mathbb G^n$ for arbitrary multivectors. Is there something particular with this section that you find unclear? – Muphrid Jul 16 '13 at 15:31
• @kjo For sure, the approach geometric algebra is not "mainstream," (yet?) but it's definitely valid. Another thing that bodes well for it is that people are apparently applying it in computers. One thing to keep in mind is the extreme conservatism of modern education. They basically always stick to "the old way" because it is less controversial to do so. They just don't want to have to go through the ordeal of defending a new method. (continued...) – rschwieb Jul 18 '13 at 12:27
• @kjo (continued...) I've been evaluating the literature on geometric algebra for about three years now. I don't think it suffers terminology problems (much) more than any conventional field. I did find a lot of versions written by nonmathematicians hard to follow, but that is an understandable difference in exposure to certain prose. I don't know if it's quite ready for highschoolers yet, but certainly it is a very interesting approach. At least it complements the mainstream approach very well. – rschwieb Jul 18 '13 at 12:30
• @kjo Earlier I said "valid" but the word I was searching for was "viable." – rschwieb Jul 18 '13 at 12:35

1. The book is not intended for high school students. According to the preface it is intended for "the introductory linear algebra course", a sophomore college course. The preface also recommends a calculus course for "mathematical maturity".

2. Definition 5.9 defines the geometric product of two vectors. The first paragraph of Section 6.1 gives reasons for not giving a definition of the geometric product of arbitrary multivectors. (It also cites a paper which gives a definition.) Instead, Theorem 6.1 gives the fundamental rules for manipulating the geometric product of multivectors.

3. The answer from Muphrid starts by assuming that for vectors $a, b, c,\, a(bc) = (ab)c$. Of course this is true. But it cannot be used to define the general geometric product. For

$(ab)c$ = (scalar + bivector)(vector)

and (bivector)(vector) has not been defined. The answer from ahala starts by assuming that the geometric product is linear without giving a reason. Of course this is true. But an unjustified assumption cannot be used to define the general geometric product.

I do not think it possible to give a quick definition of the general geometric product.

• "I do not think it possible to give a quick definition of the general geometric product." I take your word for it, but I never asked for a "quick" definition. That said, this would be the only instance (in my admittedly narrow experience) in which such foundational specifications are not amenable to a succinct statement. (This is just to say that your statement is somewhat rattling to my provincial expectations...) Thank you for correcting my statement regarding the book's intended audience. I have reworded my post accordingly. I apologize for the error. – kjo Jul 19 '13 at 20:50
• And thank you also for your critique of the other answers. – kjo Jul 19 '13 at 20:53
• Welcome, Alan :) hope to see you around! – rschwieb Jul 19 '13 at 22:45
• Professor, would you regard it as sufficient to use associativity merely to say $(ab)c = a(bc) = abc$? I mean, to me this implicitly tells me that I can take the product of more than two vectors. I'm not required to think of it as a scalar-vector and bivector-vector product. That was the intent of my answer--to say merely that any number of vectors can be involved in a geometric product, and from this, products of bivectors and vectors, and other similar products, follow. – Muphrid Jul 20 '13 at 3:52
• Let's take something more familiar: the real number system. They are defined in terms of Dedekind cuts or Cauchy sequences. The definitions are complicated. But you can use real numbers without understanding (or even knowing about) the definitions. What you need to know is their properties: commutativity, associativity, etc. It is the same with multivectors and the geometric product: you can use them if you know their properties from my Theorem 6.1, even though you don't know their definitions. – Alan Macdonald Jul 27 '13 at 16:49

There is a definition of the geometric product that applies to general multivectors in any Clifford algebra. It follows directly from the definition of the Clifford algebra. To define a Clifford algebra you need a vector space $V$ and a symmetric bilinear form $B(u,v)$ defined for any $u,v\in V$. The Clifford algebra is the quotient of the tensor algebra of $V$ with respect to the two-sided ideal generated by all elements of the form $u\otimes v+v\otimes u -2B(u,v)$ where $u,v\in V$. The geometric product is the product in the quotient algebra. It is standard and you can find the definition of that in any textbook on abstract algebra. Basically, the geometric product is the product in the tensor algebra of $V$ modulo the ideal.

AN EXAMPLE:

To illustrate, consider $\mathbb R^2$ and the bilinear form defined by $B(e_1,e_1)=1$, $B(e_2,e_2)=1$, $B(e_1,e_2)=0$, where $e_1=(1,0)$ and $e_2=(0,1)$. The two-sided ideal generated by $u\otimes v+v\otimes u -2B(u,v)$ is infinite dimensional as the tensor algebra itself. It contain the following elements among others:

$e_1\otimes e_1-1,\quad e_2\otimes e_2-1,\quad \text{and}\quad e_1\otimes e_2+e_2\otimes e_1$.

This can be used to compute the following products:

$e_1e_1 = e_1\otimes e_1=e_1\otimes e_1 -(e_1\otimes e_1-1)=1$,

$e_2e_2 = e_2\otimes e_2=e_2\otimes e_2 -(e_2\otimes e_2-1)=1$,

$e_1e_2=e_1\otimes e_2= \tfrac{1}{2}(e_1\otimes e_2- e_2\otimes e_1)+\tfrac{1}{2}(e_1\otimes e_2+ e_2\otimes e_1)=\tfrac{1}{2}(e_1\otimes e_2- e_2\otimes e_1)$.

In short, $e_1^2=1$, $e_2^2=1$, and $e_1e_2=-e_2e_1$.

Even though the tensor algebra is infinite-dimensional, the quotient algebra is finite-dimensional. See what happens if you try to get to grade 3. For instance, consider this product

$e_1(e_1\wedge e_2)$ where $e_1\wedge e_2=\tfrac{1}{2}(e_1\otimes e_2- e_2\otimes e_1)$.

It is again a straightforward application of the tensor product modulo the ideal:

$e_1(e_1\wedge e_2)=\tfrac{1}{2}(e_1\otimes e_1\otimes e_2 - e_1 \otimes e_2\otimes e_1)$

but $e_1\otimes e_1\otimes e_2=(e_1\otimes e_1-1)\otimes e_2 +e_2=e_2$ and

$e_1\otimes e_2\otimes e_1=(e_1\otimes e_2+e_2\otimes e_1)\otimes e_1 -e_2\otimes e_1\otimes e_1=$

$=e_2\otimes e_1\otimes e_1=e_2+e_2\otimes(e_1\otimes e_1-1)=e_2$.

So, we get $e_1(e_1\wedge e_2)=\tfrac{1}{2}(e_2+e_2)=e_2$, that is we are back to grade 1. Since the quotient algebra is finite-dimensional, every element can be expressed in term of the basis, which consists of $1, e_1, e_2, e_1e_2$ in the example we are considering. So, every multivector $A$ can be expressed as follows:

$A=s+xe_1+ye_2+pe_1e_2$.

If you have two such multivectors you can compute the product simply by using associativity, distributivity, and the properties we have derived above: $e_1^2=1, e_2^2=1, e_1e_2=-e_2e_1$.

You can easily repeat this exercise for other dimensions and for different bilinear forms.

To come back to the definition of the geometric product, here is how you can understand its significance. In geometry, you are dealing with certain geometric structures. For instance, you might want to find a line passing through two points, or you might want to find a point at the intersection of two lines. These kinds of problems can be dealt with efficiently by applying the exterior structure. You also might want to find, say, a line which passes through a given point and is perpendicular to another line. This kind of problem is related to the orthogonal structure. The tensor product is too general. By using the quotient algebra you are effectively eliminating any part of the tensor product which is not related to exterior or orthogonal structure. What is left has a clear geometric significance. In a way, the geometric product does a lot of work for you behind the curtains, so that you can concentrate on the relevant geometric structures. The expression $uv=u\cdot v+u\wedge v$ is not really the definition of the product. It is just a property that the geometric product of two vectors has.

Alan Macdonald does not use the definition of the geometric product I described above because he does not presume his readers are familiar with the tensor algebra, ideals, or quotients. Instead, he wants to concentrate on applications, geometric properties of the algebra, and on computation. If you are not satisfied with his approach, perhaps you need to read another book. This one

Clifford Algebras and Lie Theory, by Meinrenken

is recent and it uses the same definition I used. There are other equivalent ways to define Clifford algebras. If you are interested, check out these books as well

Quadratic Mappings and Clifford Algebras, by Helmstetter and Micali,

Clifford Algebras: An introduction, by Garling.

Perhaps, after trying to read these books you will appreciate Alan's book more.

Clifford algebra is a well-established part of standard mathematics. It is used in differential geometry and Clifford Analysis, not to mention various applications in physics. No one questions its validity. People who refer to it as Geometric algebra simply want to help promote it in engineering, applied mathematics, and physics. The focus is on applications rather than mathematical rigour. As Alan has pointed out, you don't need to know how the algebra is defined in general in order to use it. You can always compute the product in the basis. It gets tedious to do it by hand as the dimension of the underlying vector space increases, but it can be implemented on a computer quite easily.

Here is an attempt at an informal, hand-waving definition. Let's start by defining the relevant terms:

A multivector is an element of a geometric algebra. It can be represented by a linear combination of blades.

Blades are the combined geometric products between scalars and vectors of an orthonormal basis in the associated vector space. The geometric product is defined such that the range of blade products is finite in a given (finite) geometric algebra. Products with $>n$ vectors can always be reduced to a product with $\leq n$ vectors, where $n$ is the dimension of the associated vector space. A blade's grade is the number of basis vectors that are multiplied together (after it is reduced). A blade of grade $k$ is called a $k$-blade. Permutations of the same product end up being scaled versions of each other, so it is possible to define a set of blades as a basis for the vector space of multivectors by choosing one of each permutation set. The standard basis of $\mathbb{R}^3$ $\{e_1,\, e_2,\, e_3\}$ leads to this standard basis of blades for $\mathbb{G}^3$: $\{e_1,\, e_2,\, e_3,\, e_1e_2,\, e_2e_3,\, e_1e_3,\, e_1e_2e_3\}$.

A $k$-vector is a linear combinations of $k$-blades. Sometimes, $2$-vectors are called bivectors, $3$-vectors are called trivectors, etc. Sometimes $1$-vectors are simply called vectors, since they have a one-to-one correspondence with the vectors in the associated vector space.

Here are some examples of each term, using the standard basis of $\mathbb{R}^3$ as the defining vectors. The second examples are not in reduced form.

• $0$-blade : $\:2$, $2(2)$
• $1$-blade : $\:e_1$, $\,3e_3e_1e_1$
• $2$-blade : $\:4e_1e_3$, $\,e_1e_3e_3e_2$

• $0$-vector : $\:3$, $\,3 + 2$
• $1$-vector : $\:4e_1 + 5e_2$, $\,6e_1 + 5e_3 - 2e_3$
• $2$-vector : $\:-13e_2e_3 + 3e_1e_3$, $\,12e_2e_3 + 3e_1e_3 - 3e_2e_3$
• $3$-vector : $\:-2e_1e_2e_3$, $\,3e_1e_2e_3 + 5e_1e_2e_3$

• Multivector : $\:3 + 4e_1 + 4e_3 - 13e_2e_3 + 3e_1e_3 - 2e_1e_2e_3$, $\,8 + 2e_1 + 4e_1e_2 - 2e_1$

The geometric product is distributive over addition. So, to perform a geometric product between multivectors we can just represent them in the same basis of blades and distribute the terms: \begin{align} u &= u_1 + u_2e_1 + u_3e_2 + ... + u_5e_1e_2 + ... \\ v &= v_1 + v_2e_1 + v_3e_2 + ... + v_5e_1e_2 + ... \end{align} \begin{align} uv &= u(v_1 + v_2e_1 + v_3e_2 + ... + v_5e_1e_2 + ...)\\ &= u(v_1) + u(v_2e_1) + u(v_3e_2) + ... + u(v_5e_1e_2) + ...\\ &= (u_1 + u_2e_1 + u_3e_2 + ... + u_5e_1e_2 + ...)(v_1) \\ &\quad + (u_1 + u_2e_1 + u_3e_2 + ... + u_5e_1e_2 + ...)(v_2e_1) \\ &\quad + (u_1 + u_2e_1 + u_3e_2 + ... + u_5e_1e_2 + ...)(v_3e_2) \\ &\quad + ... \\ &\quad + (u_1 + u_2e_1 + u_3e_2 + ... + u_5e_1e_2 + ...)(v_5e_1e_2)\\ &\quad + ... \\ &= (u_1)(v_1) + (u_2e_1)(v_1) + (u_3e_2)(v_1) + ... + (u_5e_1e_2)(v_1) + ...\\ &\quad+ (u_1)(v_2e_1) + (u_2e_1)(v_2e_1) + (u_3e_2)(v_2e_1) + ... + (u_5e_1e_2)(v_2e_1) + ...\\ &\quad + (u_1)(v_3e_2) + (u_2e_1)(v_3e_2) + (u_3e_2)(v_3e_2) + ... + (u_5e_1e_2)(v_3e_2) + ...\\ &\quad + ... \\ &\quad + (u_1)(v_5e_1e_2) + (u_2e_1)(v_5e_1e_2) + (u_3e_2)(v_5e_1e_2) + ... + (u_5e_1e_2)(v_5e_1e_2) + ...\\ &\quad + ... \\ \end{align} We are left with a sum of products of blades. The geometric product is associative, so we don't actually need the parenthesis: \begin{align} &= u_1v_1 + u_2e_1v_1 + u_3e_2v_1 + ... + u_5e_1e_2v_1 + ...\\ &\quad + u_1v_2e_1 + u_2e_1v_2e_1 + u_3e_2v_2e_1 + ... + u_5e_1e_2v_2e_1 + ...\\ &\quad + u_1v_3e_2 + u_2e_1v_3e_2 + u_3e_2v_3e_2 + ... + u_5e_1e_2v_3e_2 + ...\\ &\quad + ...\\ &\quad + u_1v_5e_1e_2 + u_2e_1v_5e_1e_2 + u_3e_2v_5e_1e_2 + ... + u_5e_1e_2v_5e_1e_2 + ...\\ &\quad + ...\\ \end{align} These are just blades that haven't been reduced. To reduce them, we apply the identities that define the geometric product:

• scalars commute with basis vectors: $ae_i = e_ia$
• the product of a basis vector with itself is 1: $e_ie_i = 1$
• basis vectors anticommute with other basis vectors: $e_ie_j = -e_je_i$

Continuing our computation. First we bring the scalars together: \begin{align} &= u_1v_1 + u_2v_1e_1 + u_3v_1e_2 + ... + u_5v_1e_1e_2 + ...\\ &\quad + u_1v_2e_1 + u_2v_2e_1e_1 + u_3v_2e_2e_1 + ... + u_5v_2e_1e_2e_1 + ...\\ &\quad + u_1v_3e_2 + u_2v_3e_1e_2 + u_3v_3e_2e_2 + ... + u_5v_3e_1e_2e_2 + ...\\ &\quad + ...\\ &\quad + u_1v_5e_1e_2 + u_2v_5e_1e_1e_2 + u_3v_5e_2e_1e_2 + ... + u_5v_5e_1e_2e_1e_2 + ...\\ &\quad + ...\\ \end{align} Then we reduce the vector products into our basis blades. We do this by swapping pairs of vectors (and negate the blade every time we do) to match the order of our basis blades. When we have a product between the same vector, we can reduce it to 1 and drop it from the blade: \begin{align} &= u_1v_1 + u_2v_1e_1 + u_3v_1e_2 + ... + u_5v_1e_1e_2 + ...\\ &\quad + u_1v_2e_1 + u_2v_2 - u_3v_2e_1e_2 + ... - u_5v_2e_2 + ...\\ &\quad + u_1v_3e_2 + u_2v_3e_1e_2 + u_3v_3 + ... + u_5v_3e_1 + ...\\ &\quad + ...\\ &\quad + u_1v_5e_1e_2 + u_2v_5e_2 - u_3v_5e_1 + ... - u_5v_5 + ...\\ &\quad + ... \end{align} Finally, after we combine like terms, we are left with a new linear combination of blades that represents our resulting multivector: \begin{align} &= (u_1v_1 + u_2v_2 + u_3v_3 + ... + u_5v_5 + ...)\\ &\quad + (u_2v_1 + u_1v_2 + u_5v_3 + ... - u_3v_5 + ...)e_1\\ &\quad + (u_3v_1 + u_1v_3 - u_5v_2 + ... + u_2v_5 + ...)e_2\\ &\quad + ...\\ &\quad + (u_5v_1 - u_3v_2 + u_2v_3 + ... + u_1v_5 + ...)e_1e_2\\ &\quad + ... \end{align} In this way, we only really need to define the product between a set of basis vectors to define the entire geometric product. As Elias said, once you have these identities along with the distributive and associative propreties, the rest of it just sort of falls out. Other definitions in geometric algebra can get away with only defining operations on blades or $k$-vectors because they likewise distribute over addition and so trivially apply to multivectors via the same sort logic we just followed: distribute the operation then apply the definition.

However, some simplified results such as the fact that the geometric product between $1$-vectors equals the sum of the inner and outer product $$$$uv = u\cdot v + u\wedge v$$$$ do not extend up to multivectors by the same logic. Being unable to see the difference was one of the biggest challenges I had in learning about geometric algebra. I think not finding a reference with full definitions of each term and how they relate to each other contributed to my confusion. It's hard to know when a term is used for convenience or a restrictive reason until you can see the whole picture!

This uses the usual properties. For vectors $a, b, c$, $aa$ is a scalar, $a(bc) = (ab)c$, and $a(b+c) = ab + ac$. For a scalar $\alpha$, $(\alpha a)b = \alpha(ab)$.

• A $k$-blade is a geometric product of $k$ anticommuting vectors.

Typically this is written in terms of wedge products, which is why this can be confusing, but you can always take a wedge product of several vectors and orthogonalize those vectors to turn those wedges into geometric products.

I use the word $k$-blade here, rather than $k$-vector. Usually, the two would be considered equivalent. But here I'm just sticking to "vector" meaning "1-blade".

• Because blades are formed from some number of anticommuting vectors, the geometric product of blades is well-defined in terms of the product of vectors and associativity.

So if I have two blades $K = abc$ and $L = defgh$ where all $a,b,c$ are orthogonal and $d,e,f,g,h$ are orthogonal to each other, then $KL = (abc)(defgh)$ is a meaningful geometric product.

• A multivector is a linear combination of blades, which aren't necessarily all of the same grade. Using linearity, the geometric product of multivectors merely involves geometric products of component blades.

Let $M = ijkl$ and $N= mn$. See that $(K+L)(M+N)$ is given by

\begin{align*}(K+L)(M+N) &= KM + LM + KN + LN \\ &= (abc)(ijkl) + (defgh)(ijkl) + (abc)(mn)+ (defgh)(mn)\end{align*}

Because of linearity, we only have to consider the definition of $A_rB_s$. And Because of the associativity, $A_rB_s =aA_{r-1}B_s = a(A_{r-1}B_s)$ for some $a$ and $A_{r-1}$, we only to consider the definition of $aA_r$.

below is not a brief word definition per se, but my current understanding of the construction of geometric products.

1). starting from the axiom $u^2$ is a real scalar, we have $u\cdot v$ defined as real.

2). From $u\cdot v$, we can define orthogonality such that if $u\cdot v = 0$, $uv = -vu=u\wedge v$.

3). from 2), we can build orthogonal basis $\{e_i\}$. The geometry products of $\{e_i\}$ are well defined according to 2) above. And then $\{e_i\}$ expands to canonical basis $\{1,e_i, e_ie_j,...\}$ with geometry products defined.

4).The general definition of $aA_r$ can be obtained from the linearity and from the geometry products of canonical basis.

I have exactly this problem, and have resorted to Python code to do this (for orthogonal basis vectors). The geometric product algorithm should be no more than a page or so of Python code for handling an arbitrary number of orthogonal basis vectors.

This code should be easily defined for reasonably large dimensions (ie: 64) because it takes advantage of bit ordering. There are $2^n$ entries for a good reason. The reason is that the bits set indicate the use of a basis vector.

 def gamul(d1,m1, d2,m2, r):
maxd = max(d1,d2)
if maxd < 0: return
r[0b000] += m1[0b000] * m2[0b000]  #0b000 is scalar part
if maxd < 1: return
r[0b001] += m1[0b001] * m2[0b000]  #0b001 is e1
r[0b001] += m2[0b001] * m1[0b000]  #0b010 is e2
if maxd < 2: return
r[0b000] += m1[0b001] * m2[0b001]
r[0b000] += m1[0b010] * m2[0b010]
r[0b010] += m1[0b010] * m2[0b000]
r[0b010] += m2[0b010] * m1[0b000]
r[0b011] += m1[0b001] * m2[0b010] #0b011 is e1^e2
r[0b011] -= m1[0b010] * m2[0b001]


And this is an example of m4 as vector (4,6) times m5 as vector (-2,-1) written into m6:

m4[0b001] = 4        # 4*e1
m4[0b010] = 6        # 6*e2
print m4
m5[0b001] = -2
m5[0b010] = -1
print m5
gamul(2,m4, 2,m5, m6)
print m6  #array has values at entry 0b00 and 0b11, scalar+bivector


This is a brute force definition that is handling dimension 0,1,2. I could calculate 3,4,5 by brute force as well and call it a day. But I highly suspect that there is a pattern that calculates it all, does it very efficiently, and works fine even for unbounded dimensions (where d1,d2 only get passed in to limit how far the code will look for non-zero items).

The other beautiful part about this is that if I ask questions like, "is this multivector zero?" just means that all components are zero. "is this scalar" means that everything except entry 0 is zero. "is this a vector?" means that every entry not having exactly 1 bit set for its index is zero, etc. In general, the blade of an entry is the number of bits set on its index. For instance, 0b011 is a bivector, 0b111 is a trivector, 0b100 is vector e3, etc. This is why 0b000 is the scalar entry. There is probably no other reasonable ordering for this.

So, noting that every entry so far is multiplying a single entry from each m and either adding it or subtracting it is interesting. I am going to guess that the entire thing works like this. Furthermore, with this definition, the basis vectors are sorted by definition:

e1 ^ e2   #just add your value
e2 ^ e1   #sort with adjacent swaps, and number of swaps determines sign
e3 ^ e2 ^ e1


What makes the standard definition seem so vague is that typically, only vector times multivector is arbitrarily defined, and there is a lot of stringing together distributing over the components before getting down to something concrete.

A bivector is JUST a multivector in which it is asserted that all other elements are set to zero. The tricky thing about GA is that the output type depends on the input type and their values, etc. It's necessary to have a simple calculator for doing concrete calculations, without all the overhead of things like SymPy, let alone not knowing how to re-implement it in another environment (JavaScript, Go, etc).

Less than a page of Python that defines Geometric Product similar to Foundations of Geometric Algebra Computing, except using binary indexing and the xor operation to dramatically simplify the explanation. The xor (per vector, with each vector in a bit) is why the product of two vectors splits into a scalar and bivector part. 01 xor 10 is 11, 10 xor 10 is 00, 01 xor 01 is 0, etc. Dot and wedge product are not explicitly defined anywhere, yet they fall out of the definition as a side-effect (computationally, obvious without symbolic manipulation):

https://github.com/rfielding/gaMul

I recommend consulting the writings of Dr. David Hestenes and especially "Clifford Algebra to Geometric Calculus".

Geometric Calculus R&D http://geocalc.clas.asu.edu

"The most comprehensive treatment of the mathematical theory is given in the book Clifford Algebra to Geometric Calculus [1984]. Except for the last chapter added in 1979, the manuscript was ready for publication by 1976 but did not appear in print until 1984, owing to an unfortunate series of publishing mishaps. Papers with extensions and improvements in the calculus are collected in Universal Geometric Calculus[Editor: there was a hyperlink to the Universal Geometric Calculus webpage of the website here]. With general arguments and many examples, the case is made there and elsewhere that geometric algebra is a more efficient general computational tool than matrix algebra. It is therefore a candidate to supplant (or subsume) matrix algebra in computer software and software designs for scientific computation." http://geocalc.clas.asu.edu/html/Evolution.html

An informal definition may be made in terms of the basis vectors $e_1, e_2, \dots e_n$: It is the product you get by requiring that it fulfils a couple of usual rules for products, notably bilinearity, distributivity and associativity (but not commutativity), as well as the following rule: $$e_i e_j = \begin{cases} 1 & i = j \\ -e_j e_i & i \neq j. \end{cases}$$ This definition may not be entirely rigourous, but it is very simple, and in practice these are the rules you would use for calculating the geometric product of arbitrary multivectors, written as sums of basis blades.