The Transwedge Product
Eric Lengyel • May 23, 2025
Introductory texts on geometric algebra often begin by showing how the geometric product is a combination of the wedge product and the dot product, giving us the formula[1]
\(\mathbf a \mathbin{\unicode{x27D1}} \mathbf b = \mathbf a \wedge \mathbf b + \mathbf a \cdot \mathbf b\).(1)
However, the above formula holds only for vectors \(\mathbf a\) and \(\mathbf b\). When \(\mathbf a\) and \(\mathbf b\) are allowed to assume values of higher grade, the geometric product generally yields more terms, especially in higher dimensions. When the operands have grades \(g\) and \(h\), the geometric product can generate a result containing terms having grades \(m\) ranging from \(|g - h|\) to \(g + h\) such that the difference between each grade \(m\) and \(g + h\) is an even number. For example, the geometric product between two bivectors \(\mathbf A\) and \(\mathbf B\) in a 4D algebra generates components having grades 0, 2, and 4. We can decompose this product as
\(\mathbf A \mathbin{\unicode{x27D1}} \mathbf B = \mathbf A \wedge \mathbf B + \mathbf A \times \mathbf B + \mathbf A \cdot \mathbf{\widetilde B}\),(2)
where the \(\mathbf A \times \mathbf B\) term is called the commutator product, defined as \(\mathbf A \times \mathbf B = \mathbf A \mathbin{\unicode{x27D1}} \mathbf B - \mathbf B \mathbin{\unicode{x27D1}} \mathbf A\). The commutator product corresponds to the grade-2 part of the geometric product in this case, but it generally produces more terms when the operands have higher grades. Furthermore, because the commutator product is defined in terms of the geometric product, it can’t help us decompose the geometric product into independent operations. That would be circular.
When one of the operands of the geometric product is a vector \(\mathbf a\), and the other operand is an arbitrary multivector \(\mathbf B\), we can generalize Equation (1) a little bit as
\(\mathbf a \mathbin{\unicode{x27D1}} \mathbf B = \mathbf a \wedge \mathbf B + \mathbf B \unicode{x230A} \mathbf a\).(3)
Here, the expression \(\mathbf B \unicode{x230A} \mathbf a\) is the right contraction, which is one of the interior products in Grassmann algebra. The right contraction is defined as \(\mathbf B \unicode{x230A} \mathbf a = \mathbf B \vee \mathbf a^{\unicode{x2605}}\), where the superscript \(\unicode{x2605}\) denotes the right dual.[2] When the operands of the contraction have the same grade, it reduces to the inner product, so we end up right back where we started if we insert a vector for \(\mathbf B\).
What would be nice to have is a general formula that gives us each possible term generated by the geometric product using only the fundamental operations of Grassmann algebra. These operations are the exterior (wedge) product, the left and right complements, and an application of the metric. All other operations in exterior algebra can be derived from these primitives, and it is my intention to demonstrate that the geometric product can be as well. The general formula that we’re looking for would need to generate a spectrum of products that include the exterior product on one end and the interior product (contraction) on the other end as well as anything that could arise in between. This formula would not only be able to replace the commutator product above but also give us every term of every geometric product between operands of higher grades.
I would like to introduce the transwedge product, which is the result of my search for a way to completely decompose the geometric product.[3] The transwedge product is parameterized by an order \(k\), and it is denoted by the upward double wedge symbol \(\unicode{x2A53}\) with a subscript or underscript indicating that order.[4] The transwedge product is defined for arbitrary multivectors \(\mathbf a\) and \(\mathbf b\) as
\(\displaystyle \mathbf a \mathbin{\underset{k}{\unicode{x2A53}}} \mathbf b = \sum_{\mathbf c \in \mathcal B_k}{(\mathbf{\underline c} \vee \mathbf a) \wedge (\mathbf b \vee \mathbf c^{\unicode{x2605}})}\).(4)
It may look like there’s a lot going on in this formula, but it’s actually pretty straightforward stuff. First, \(\mathcal B_k\) is the set of all basis elements having grade \(k\). For example, in three dimensions, \(\mathcal B_0 = \{\mathbf 1\}\), \(\mathcal B_1 = \{\mathbf e_1, \mathbf e_2, \mathbf e_3\}\), \(\mathcal B_2 = \{\mathbf e_{23}, \mathbf e_{31}, \mathbf e_{12}\}\), and \(\mathcal B_3 = \{\mathbf e_{123}\}\). The sum is taken over all basis elements in the set \(\mathcal B_k\), and each summand is a wedge product of something involving \(\mathbf a\) on the left and something involving \(\mathbf b\) on the right. The left operand, \(\mathbf{\underline c} \vee \mathbf a\), is the left complement of \(\mathbf c\) within the subspace spanned by the factors of \(\mathbf a\), with the sign set so that \((\mathbf{\underline c} \vee \mathbf a) \wedge \mathbf c = \mathbf a\). This means the left operand contains the factors of \(\mathbf a\) that are not in \(\mathbf c\). If \(\mathbf c\) is not a factor of \(\mathbf a\), then the result is zero, so many of the summands vanish. The right operand, \(\mathbf b \vee \mathbf c^{\unicode{x2605}}\), is the right contraction of \(\mathbf b\) with \(\mathbf c\), which we could write as \(\mathbf b \unicode{x230A} \mathbf c\). This has the effect of removing the factors of \(\mathbf c\) from \(\mathbf b\) or producing zero if that’s not possible. The dual operation in this part is where the metric enters the calculation.
When \(k = 0\), the transwedge product reduces to the exterior product. In this case, there is only one summand, and it has \(\mathbf c = \mathbf 1\). The left complement and right dual of \(\mathbf 1\) are both the volume element (or antiscalar) \(\unicode{x1D7D9}\), which is the identity of the antiwedge product. Thus, the summand becomes \(\mathbf a \wedge \mathbf b\).
Now suppose that \(\mathbf a\) is a simple \(m\)-vector. When \(k = m\), the transwedge product reduces to the interior product. There is only one basis element of grade \(m\) that matches the basis element by which \(\mathbf a\) is multiplied, and the summand is nonzero only when \(\mathbf c\) is set to this particular basis element. In this case, the expression \(\mathbf{\underline c} \vee \mathbf a\) reduces to the scalar coefficient of this basis element in \(\mathbf a\), which we can transfer to the expression \(\mathbf b \vee \mathbf c^{\unicode{x2605}}\). This makes the entire summand \(\mathbf b \vee \mathbf a^{\unicode{x2605}}\), which is the right contraction of \(\mathbf b\) with \(\mathbf a\), often written as \(\mathbf b \unicode{x230A} \mathbf a\). When \(\mathbf a\) is non-simple, multiple summands produce nonzero results, one for each component of \(\mathbf a\).
When \(0 < k < m\), the transwedge product \(\unicode{x2A53}_k\) is a liminal product belonging to a transitional sequence of products between the exterior product and the interior product. For operands \(\mathbf a\) and \(\mathbf b\) having grades \(g\) and \(h\), the transwedge product \(\mathbf a \mathbin{\unicode{x2A53}_k} \mathbf b\) generates a result having grade \(g + h - 2k\), assuming it’s nonzero. Do these liminal products have any geometric meaning? We’ll get back to that in a moment, but first, let’s talk about the geometric product.
With the transwedge product in hand, we can now state that the geometric product is given by the sum of the transwedge products of all orders ranging from zero to the dimension \(n\) of the algebra, where we negate for orders 2 and 3 modulo 4. We can express this as
\(\displaystyle \mathbf a \mathbin{\unicode{x27D1}} \mathbf b = \sum_{k=0}^n{(-1)^{k(k-1)/2}\,\mathbf a \mathbin{\unicode{x2A53}_k} \mathbf b}\).(5)
In the case that \(\mathbf a\) and \(\mathbf b\) are vectors in a three-dimensional algebra, we can now rewrite the geometric product in Equation (1) as follows.
\(\begin{align}\mathbf a \mathbin{\unicode{x2A53}_0} \mathbf b &= \mathbf a \wedge \mathbf b \\[8px] \mathbf a \mathbin{\unicode{x2A53}_1} \mathbf b &= \mathbf a \vee \mathbf b^{\unicode{x2605}} = \mathbf a \cdot \mathbf b \end{align}\)
\(\mathbf a \mathbin{\unicode{x27D1}} \mathbf b = \mathbf a \mathbin{\unicode{x2A53}_0} \mathbf b + \mathbf a \mathbin{\unicode{x2A53}_1} \mathbf b = \mathbf a \wedge \mathbf b + \mathbf a \cdot \mathbf b\)(6)
In the case that \(\mathbf A\) and \(\mathbf B\) are bivectors in a four-dimensional algebra, we can now rewrite the geometric product in Equation (2) as follows.
\(\begin{align}\mathbf A \mathbin{\unicode{x2A53}_0} \mathbf B &= \mathbf A \wedge \mathbf B \\[8px] \mathbf A \mathbin{\unicode{x2A53}_2} \mathbf B &= -\mathbf A \vee \mathbf B^{\unicode{x2605}} = \mathbf A \cdot \mathbf{\widetilde B} \end{align}\)
\(\mathbf A \mathbin{\unicode{x27D1}} \mathbf B = \mathbf A \mathbin{\unicode{x2A53}_0} \mathbf B + \mathbf A \mathbin{\unicode{x2A53}_1} \mathbf B + \mathbf A \mathbin{\unicode{x2A53}_2} \mathbf B = \mathbf A \wedge \mathbf B + \mathbf A \mathbin{\unicode{x2A53}_1} \mathbf B + \mathbf A \cdot \mathbf{\widetilde B}\)(7)
Here, the liminal product \(\mathbf a \mathbin{\unicode{x2A53}_1} \mathbf b\) replaces the commutator product in Equation (2), and it properly generalizes to higher dimensions.
The formula given by Equation (5) for the geometric product applies universally to all geometric algebras. It works in any dimension and with any metric signature, including ordinary Euclidean geometric algebra, projective geometric algebra, spacetime geometric algebra, and conformal geometric algebra. This demonstrates that exterior algebra and geometric algebra are inextricably tied together, and it’s thus valid to consider them as different aspects of the same algebraic structure.
When the metric is diagonal, the geometric product between each pair of basis elements is given by exactly one of the transwedge products. This is illustrated in the following table for the 4D projective geometric algebra \(\mathbb R(3,0,1)\), which shows the geometric product and color codes the corresponding transwedge products of different orders.
So what about the geometric significance of the liminal products that are neither exterior products nor interior products? Let’s take a look at what we can already do in \(\mathbb R(3,0,1)\) with the wedge and antiwedge products to calculate joins, meets, and weight expansions. These are summarized in the following table, which draws from Tables 2.7 and 2.22 in PGA Illuminated.
Operation | Illustration |
---|---|
\(\mathbf p \wedge \mathbf q\) Line containing points \(\mathbf p\) and \(\mathbf q\). |
|
\(\boldsymbol l \wedge \mathbf p\) Plane containing line \(\boldsymbol l\) and point \(\mathbf p\). |
|
\(\mathbf g \vee \mathbf h\) Line where planes \(\mathbf g\) and \(\mathbf h\) intersect. |
|
\(\mathbf g \wedge \boldsymbol l\) Point where plane \(\mathbf g\) and line \(\boldsymbol l\) intersect. |
|
\(\mathbf p \wedge \mathbf g^{\unicode{x2606}}\) Line containing point \(\mathbf p\) and orthogonal to plane \(\mathbf g\). |
|
\(\mathbf p \wedge \boldsymbol l^{\unicode{x2606}}\) Plane containing point \(\mathbf p\) and orthogonal to line \(\boldsymbol l\). |
|
\(\boldsymbol l \wedge \mathbf g^{\unicode{x2606}}\) Plane containing line \(\boldsymbol l\) and orthogonal to plane \(\mathbf g\). |
This table includes almost all of the ways that we can combine two objects that could each be a point, line, or plane to create a new related geometry, but there is one operation that’s conspicuously absent. How do we combine two skew lines \(\boldsymbol l\) and \(\mathbf k\) to create a new line \(\mathbf f\) that’s perpendicular to the first two? The situation is shown in the figure below. In PGA Illuminated, Section 3.6.3, the solution is to extract the axis of rotation from the motor given by the geometric antiproduct \(\boldsymbol l \mathbin{\unicode{x27C7}} \smash{\mathbf{\underset{\Large\unicode{x7E}}{k}}}\) and enforce the geometric constraint with Equation (3.128). Extracting the axis means selecting the grade-2 part of the geometric antiproduct, an operation that I always felt was artificial because we’re overcalculating with the geometric antiproduct and throwing away some of the information in the result.
Now that we have the transwedge product, we can calculate the line \(\mathbf f\) directly. Like all operations in geometric algebra, the transwedge product has an antiproduct given by a simple De Morgan relationship. The transwedge antiproduct is denoted by a downward double wedge, and it is defined as
\(\mathbf a \mathbin{\underset{k}{\unicode{x2A54}}} \mathbf b = \overline{\underline{\mathbf a} \mathbin{\underset{k}{\unicode{x2A53}}} \underline{\mathbf b}}\).(8)
The line \(\mathbf f\) that is perpendicular to two skew lines \(\boldsymbol l\) and \(\mathbf k\) is simply given by their order 1 transwedge antiproduct, as expressed by
\(\mathbf f = \boldsymbol l \mathbin{\underset{1}{\unicode{x2A54}}} \mathbf k\).(9)
The line \(\mathbf f\) is the same as the one extracted from the geometric antiproduct, but this time we don’t have to throw anything away. Keep in mind that \(\mathbf f\) generally needs to be adjusted with Equation (3.78) in order to orthogonalize the direction and moment and make it satisfy the geometric constraint. This essentially divides by the norm of the line with respect to the ring of dual numbers instead of the reals (which is something I’d like to study further).
In conformal geometric algebra, Equation (8) generalizes to circles, and lines are special cases of circles that include the point at infinity. Suppose we have two circles represented by trivectors \(\mathbf c\) and \(\mathbf d\), which can each have any arbitrary position, attitude, and radius. When we multiply them together with the transwedge antiproduct of order 1, we get a new circle \(\mathbf c \mathbin{\unicode{x2A54}_1} \mathbf d\) that intersects both of the circles \(\mathbf c\) and \(\mathbf d\) at right angles, as shown in the figure below. The new circle also needs to be adjusted to satisfy the geometric constraint, but in CGA, that involves dividing by the norm of a trivector in a six-dimensional base ring. I’m able to do this, but I’ll need to study the structure of the subalgebras to better understand why it works this way.
One more practical application of the transwedge product I’d like to mention involves the computation of the geometric product in conformal geometric algebra. It’s usually convenient to work in a basis for which the metric is not diagonal in CGA, but this can make it difficult to implement a geometric product for general calculations. The advice I give in PGA Illuminated is to transform to the basis where the metric is diagonal, compute the geometric product in that setting, and then transform back to the basis where the metric is not diagonal. Other textbooks have given this advice as well, and it’s the method I used in my Mathematica packages, but it’s kind of a pain in the neck. The transwedge product gives us an alternative method, once we’ve implemented the primitive operations of the exterior algebra, that can be used to compute the geometric product explicitly without having to change back and forth between bases. I updated the Mathematica packages to use this method, and I think it’s a vastly cleaner solution that also reduces the size of the code considerably.
Notes
[1] The symbol \(\mathbin{\unicode{x27D1}}\) denotes the geometric product here instead of the traditional juxtaposition because modern geometric algebra also has a geometric antiproduct denoted by \(\mathbin{\unicode{x27C7}}\).
[2] The right dual, or more specifically the right bulk dual, is equivalent to the Hodge dual. We use the term right bulk dual because there is also a left bulk dual, and when we have a degenerate metric, there are separate right and left weight duals.
[3] I recently discovered that John Browne pursued similar ideas in his book Grassmann Algebra, Volume 2. My formulation has significant differences, but I adopted his use of the term “order”.
[4] The symbol \(\unicode{x2A53}\) is the Unicode character U+2A53, and the symbol \(\unicode{x2A54}\) is the Unicode character U+2A54.
Additional Resources
- Eric Lengyel’s central hub for projective geometric algebra: projectivegeometricalgebra.org.
- More information about the transwedge product on the wiki>.
- Projective Geometric Algebra Illuminated