Geometric Algebra Books
Eric Lengyel • February 27, 2025
This post is a follow-up to a previous post called Poor Foundations in Geometric Algebra, which angrily describes how and why inner products, contractions, and duals are frequently defined incorrectly in the geometric algebra literature. Here, I take a look at several popular books in the field and talk about what they got right and what they got wrong. Inner products, contractions, and duals are all related to each other and satisfy many nice properties when they’re defined correctly. A couple basic requirements, specifically that the inner product preserve the structure of the exterior algebra and that the contraction reduce to the inner product for operands of the same grade, limit each of their definitions to exactly the one possibility shown in the following table. Any other definitions that end up producing different results are provably wrong and lead to things like broken norms. (Here, \(\mathbf G\) is the vector space metric extended by exomorphism to the entire exterior algebra.)
Operation | Definition | Identities |
---|---|---|
Inner product | \(\mathbf A \mathbin{\small\unicode{x2022}} \mathbf B = \mathbf A^{\mathrm T} \mathbf{GB}\) | \(\mathbf A \mathbin{\small\unicode{x2022}} \mathbf B = \langle\mathbf{A \mathbin{\unicode{x27D1}} \widetilde B}\rangle_0 = \langle\mathbf{\widetilde A \mathbin{\unicode{x27D1}} B}\rangle_0 = \langle\mathbf{B \mathbin{\unicode{x27D1}} \widetilde A}\rangle_0 = \langle\mathbf{\widetilde B \mathbin{\unicode{x27D1}} A}\rangle_0\) |
Right dual (Hodge dual) |
\(\mathbf A^{\small\unicode{x2605}} = \overline{\mathbf{GA}}\) | \(\mathbf A^{\small\unicode{x2605}} = \mathbf{\tilde A} \mathbin{\unicode{x27D1}} \unicode{x1D7D9}\) \(\mathbf A \wedge \mathbf B^{\small\unicode{x2605}} = (\mathbf A \mathbin{\small\unicode{x2022}} \mathbf B)\unicode{x1D7D9}\), when \(\operatorname{gr}(\mathbf A) = \operatorname{gr}(\mathbf B)\) |
Left dual | \(\mathbf A_{\small\unicode{x2605}} = \underline{\mathbf{GA}}\) | \(\mathbf A_{\small\unicode{x2605}} = \unicode{x1D7D9} \mathbin{\unicode{x27D1}} \mathbf{\tilde A}\) \(\mathbf A_{\small\unicode{x2605}} \wedge \mathbf B = (\mathbf A \mathbin{\small\unicode{x2022}} \mathbf B)\unicode{x1D7D9}\), when \(\operatorname{gr}(\mathbf A) = \operatorname{gr}(\mathbf B)\) |
Right contraction | \(\mathbf B \unicode{x230A} \mathbf A = \mathbf B \vee \mathbf A^{\small\unicode{x2605}}\) | \(\mathbf B \unicode{x230A} \mathbf A\ = \langle\mathbf{\widetilde A \mathbin{\unicode{x27D1}} B}\rangle_{\operatorname{gr}(\mathbf B) - \operatorname{gr}(\mathbf A)}\) |
Left contraction | \(\mathbf A \unicode{x230B} \mathbf B = \mathbf A_{\small\unicode{x2605}} \vee \mathbf B\) | \(\mathbf A \unicode{x230B} \mathbf B\ = \langle\mathbf{B \mathbin{\unicode{x27D1}} \widetilde A}\rangle_{\operatorname{gr}(\mathbf B) - \operatorname{gr}(\mathbf A)}\) |
And now for the books. This is an objective evaluation of what is or is not consistent with the above definitions. In several instances, these books are wrong in the same way as other books because the botched mathematics has been copied without actually checking to see if it’s correct. Let me know if there are any additional books you’d like me to take a look at.

Geometric Algebra for Computer Science
Leo Dorst, Daniel Fontijne, and Stephen Mann, 2007
Inner Products • Correct • The inner product between blades \(\mathbf A\) and \(\mathbf B\) of the same grade is rather implicitly defined by Equation (3.5) on page 68 as \(\mathbf A \ast \mathbf{\tilde B}\), where \(\ast\) is the scalar product defined by Equation (3.2). While technically producing the correct results, the use of this scalar product and reverse operation are unnecessary complications that really shouldn’t be there.
Contractions • Wrong • The left contraction is defined by a list of axioms on page 73. The Leibniz product rule given by Equation (3.10) is incorrect, and as a result, this definition of the contraction fails to reduce to the inner product when the operands have the same grade. However, that is a required property of the both the left and right contraction, so this definition is most certainly wrong.
Duals • Wrong • The dual \(\mathbf A_k^*\) of a k‑blade \(\mathbf A_k\) is defined by the formula \(\mathbf A_k^* = \mathbf A_k \unicode{x230B} \mathbf I_n^{-1}\) given on page 80. Since the volume element \(\mathbf I\) is not invertible when the metric is degenerate (as it is in PGA), this formula obviously cannot be universally valid. More importantly, this dual satisfies neither the identity \(\mathbf A \wedge \mathbf B^* = (\mathbf A \cdot \mathbf B) \mathbf I\) nor the identity \(\mathbf A^* \wedge \mathbf B = (\mathbf A \cdot \mathbf B) \mathbf I\) when \(\mathbf A\) and \(\mathbf B\) have the same grade, which is required for the dual to have the proper relationship with the left or right contraction.

Linear and Geometric Algebra
Alan Macdonald, 2010
Contractions, Inner Products • Wrong • This book conflates contractions and inner products, and it defines them both in Equation (6.8) on page 101. For a j‑vector A and a k‑vector B, the definition given for a left contraction is \(A \unicode{x230B} B = \langle A \mathbin{\unicode{x27D1}} B \rangle_{k - j}\), where I have updated the notation. This definition does not produce the correct results, and it does not reduce to a true inner product when the operands have the same grade. The correct formula for the left contraction in terms of grade selection from a geometric product is \(A \unicode{x230B} B = \langle B \mathbin{\unicode{x27D1}} \tilde{A} \rangle_{k - j}\).
Duals • Wrong • The definition of the dual \(A^*\) is stated at the top of page 109 as \(A^* = A \mathbin{\unicode{x27D1}} I^{-1}\), where I have clarified the operations. This formula is wrong for the same reasons that it’s wrong in Geometric Algebra for Computer Science. The author acknowledges in a footnote on the same page that there have been several different definitions of the dual that differ only by sign on a per-grade basis and then observes that “There is no natural choice among them to be the dual.” What he didn’t realize was that the reason for there being no natural choice among those particular formulas is that they are all incorrect. There is indeed a natural choice for the dual, but it is given by the formula \(A^* = \tilde{A} \mathbin{\unicode{x27D1}} I\) in terms of the geometric product. This is equivalent to the Hodge dual, which is mentioned at the bottom of page 111. The author makes the claim that the Hodge dual “cannot be defined directly algebraically” in the exterior algebra, but that is obviously incorrect since we can define it very simply as \(A^* = \overline{\mathbf G A}\).

Geometric Algebra for Physicists
Chris Doran and Anthony Lasenby, 2003
Contractions, Inner Products • Wrong • This book also conflates contractions and inner products. The problems begin with the definition of an “inner product”, though it’s really giving the left contraction, between a vector \(a\) and a grade‑r multivector \(A_r\) in Equation (4.33) on page 91. With updated notation, the definition states \(a \unicode{x230B} A_r = \frac{1}{2} (a \mathbin{\unicode{x27D1}} A_r - (-1)^r A_r \mathbin{\unicode{x27D1}} a)\), which has the effect of selecting either the symmetric or antisymmetric part of the two grades produced by \(a \mathbin{\unicode{x27D1}} A_r\) depending on the value of r. This formula is not correct, and it does not produce the correct contraction for all grades r. It’s equivalent to selecting the components of \(a \mathbin{\unicode{x27D1}} A_r\) with grade \(r - 1\), which we know to be wrong. The correct left contraction \(a \unicode{x230B} A_r\) is actually given by the grade-\((r - 1)\) components of \(A_r \mathbin{\unicode{x27D1}} a\) in the case that \(a\) is a vector.
Duals • Wrong • At the bottom of page 96, this book identifies the expression \(I \mathbin{\unicode{x27D1}} A_r\) as “a” duality transformation, where \(I\) is the volume element, apparently acknowledging that several different kinds of duals have been in use, but it also says it returns “the” orthogonal complement of \(A_r\). It’s a shame that the authors discuss consistent orientations in the paragraph right before this one, but then immediately fail to apply the concept to duality transformations. If they had, they might have realized that only the Hodge dual produces consistently oriented results. The book discusses the Hodge dual later on page 220, where the Hodge dual \(\ast\) of an r‑vector \(A_r\) is given by Equation (6.306) as \(\ast A_r = (I^{-1} \mathbin{\unicode{x27D1}} A_r)^\dagger\). (The dagger represents the reverse operation here.) The book then states that “It is a straightforward exercise to prove the main results for the Hodge \(\ast\) operation”, but we can easily find a counterexample. In the spacetime algebra \(\mathrm{Cl}(3,1)\) with \(I = \mathbf e_{0123}\), Equation (6.306) gives \(\ast \mathbf e_0 = \mathbf e_{123}\), which means that \(\mathbf e_0 \wedge \ast \mathbf e_0 = I\). But since \(\mathbf e_0 \cdot \mathbf e_0 = -1\), the Hodge dual must satisfy the identity \(\mathbf e_0 \wedge \ast \mathbf e_0 = -I\) in this case. Equation (6.306) is not correct, and it has the effect of introducing an extra factor of the reciprocal of the metric signature, which is \(-1\) in this example. (Of course, any formula for the Hodge dual involving the inverse of \(I\) must be wrong because it fails whenever the metric signature is zero.)

New Foundations for Classical Mechanics
David Hestenes, 1986
Contractions, Inner Products • Wrong • When it comes to the inner product or contraction, the mistakes made in many other books can be traced back to errors in Hestenes’ work. This book arbitrarily defines the “inner product” between a vector \(\mathbf a\) and any k‑blade \(\mathbf A_k\) in Equation (7.12a) on page 36 as \(\mathbf a \unicode{x230B} \mathbf A_k = \frac{1}{2} (\mathbf a \mathbin{\unicode{x27D1}} \mathbf A_k - (-1)^k \mathbf A_k \mathbin{\unicode{x27D1}} \mathbf a)\), which was clearly copied by Geometric Algebra for Physicists. Both books actually use a dot notation instead of the left contraction notation used here, and this book says “it is to be regarded as a generalization of the inner product of vectors” at the top of page 33. However, using the formula given by Equation (1.18) on page 43 to calculate the inner product just for operands of the same grade, the given definition does not correctly generalize the inner product of vectors because it produces the wrong sign for operands having grade 2 or 3 modulo 4. Despite the long established requirement that inner products always yield scalar results, Hestenes continues using the term “inner product” when the operands don’t have the same grade and the result is thus not a scalar. He should have realized that it is a “contraction” or “interior product” in this case. Regardless, it does not produce the correct results, with the first example being the wrong sign given by Equation (6.15) on page 33.
Duals • Wrong • On pages 56 and 57, this book defines the dual of any multivector \(A\) to be \(iA\), where \(i\) is the volume element. This is incorrect because it does not produce results with a consistent orientation or satisfy either the identity \(A \wedge iB = (A \cdot B) i\) or the identity \(iA \wedge B = (A \cdot B)i\) when \(A\) and \(B\) have the same grade.

Understanding Geometric Algebra
Kenichi Kanatani, 2015
Contractions, Inner Products • Wrong • This book also conflates contractions and inner products. On page 62, this book states a general rule that the contraction is calculated by alternately changing signs as a dot product is distributed through a wedge product, but it gets the order of the factors wrong. The right sides of Equations (5.20), (5.22), (5.25), and (5.28) should be negated. However, Equation (5.23) for the contraction of a vector and trivector actually gives the correct result. The incorrect order of factors raises the need to add a reversal the the norm calculations for bivectors and trivectors in Equations (5.44) and (5.46) on page 67. When the inner product is defined correctly, these reversals disappear.
Duals • Wrong • The dual \(\boldsymbol a^*\) of a k‑vector \(\boldsymbol a\) is defined by the formula \(\boldsymbol a^* = -\boldsymbol a \unicode{x230B} I\) given on page 69. This dual satisfies neither the identity \(\mathbf A \wedge \mathbf B^* = (\mathbf A \cdot \mathbf B) \mathbf I\) nor the identity \(\mathbf A^* \wedge \mathbf B = (\mathbf A \cdot \mathbf B) \mathbf I\) when \(\mathbf A\) and \(\mathbf B\) have the same grade, which is required for the dual to have the proper relationship with the left or right contraction.

Clifford Algebras and Spinors
Pertti Lounesto, 2001
Inner Products • Correct • Though it doesn’t address inner products in general, this book does provide definitions of the inner product based on Gram determinants for bivectors and trivectors on pages 36 and 37. These produce the correct results, and they are reiterated on pages 94 and 95 for the cross product.
Duals • Mostly Correct • On pages 38 and 39, this book gives the customary definition for the Hodge dual in which two elements \(\mathbf A\) and \(\mathbf B\) of the same grade must satisfy \(\mathbf B \wedge \star\mathbf A = (\mathbf B \cdot \mathbf A)I\), where \(I\) is the volume element and some generalization has been applied. (We now know this to be a theorem that can be derived from a simpler explicit definition.) In the footnote on page 39, the book also gives the correct identity \(\star u = \tilde u \mathbin{\unicode{x27D1}} I\) involving the geometric product. It then states that the “Clifford dual” given by \(\star u = u \mathbin{\unicode{x27D1}} I\) is more convenient, but the Hodge dual is properly used in later places like page 112 anyway. Had the author been aware of the connection between the Hodge dual and contractions, I think he might have realized that the Clifford dual has problems and just avoided it altogether.
Contractions • Wrong • On page 46, the left contraction is defined in two equivalent ways, but both are incorrect. The first definition is a formula in the middle of the page that reads \(u \unicode{x230B} v = [u \wedge (v \mathbin{\unicode{x27D1}} I)]I^{-1}\), where I have again generalized to arbitrary dimensions. The author is apparently unaware that this describes an antiproduct with a dual, and if he had used the Hodge dual instead of the Clifford dual, it would have been a correct definition, at least when the metric is nondegenerate. However, as stated, the definition does not reduce to the inner product for operands of the same grade and thus cannot be correct. The second definition, immediately following the first, describes three properties that the left contraction must satisfy, but the second property stating the Leibniz product rule is incorrect. This also causes the contraction not to reduce to the inner product for operands of the same grade.

Grassmann Algebra, Volume 1: Foundations
John Browne, 2012
Inner Products • Correct • This book defines the inner product of two elements \(\mathbf A\) and \(\mathbf B\) having the same grade with the formula \(\mathbf A \mathbin{\small\unicode{x2022}} \mathbf B = \mathbf A \vee \mathbf B^{\small\unicode{x2605}}\) in Equation (6.1) on page 373. (The notation has been updated to avoid confusion). This formula produces the correct results in all cases despite not being the simplest definition with the fewest dependencies.
Contractions • Mostly Correct • The right contraction of \(\boldsymbol \alpha\) and \(\boldsymbol \beta\), always called the interior product in this book, is defined by Equation (6.5) on page 374 to be \(\boldsymbol \alpha \vee \mathbf {\boldsymbol \beta}^{\small\unicode{x2605}}\). This definition is correct, and it reduces to the inner product when \(\boldsymbol \alpha\) and \(\boldsymbol \beta\) have the same grade, as required. Importantly, the Leibniz product rule for the right contraction given by Equation (6.100) on page 409 is correct. Left contractions are avoided in the book, but Equation (6.7) does supply the definition \(\mathbf {\boldsymbol \alpha}^{\small\unicode{x2605}} \vee \boldsymbol \beta\). This formula is subtly wrong because no distinction is made between right duals and left duals, and the author thus did not realize that the left contraction should instead be given by \(\mathbf {\boldsymbol \alpha}_{\small\unicode{x2605}} \vee \boldsymbol \beta\). The error led to a dependency on dimension showing up in Equation (6.9), as pointed out at the top of page 376. With the correct definition of of left contraction, this dependency disappears, and the left contraction properly reduces to the inner product just as the right contraction does.
Duals • Mostly Correct • Duals are called complements in this book, and they are developed through a long process in Chapter 5. The explicit formulas for the dual contain a division by the square root of the determinant of the metric, so they don’t work when the metric is degenerate. Otherwise, they appear to produce the correct results.
Additional Resources
- The previous post on this topic, Poor Foundations in Geometric Algebra.
- Eric Lengyel’s central hub for projective geometric algebra: projectivegeometricalgebra.org.
- Projective Geometric Algebra Illuminated. Inner products, contractions, and duals are done right.