Table of symbols
These tables list all the functions, operators and constants that are recognized as geometric operations, e.g. in code evaluated as part of a @ga
block.
Built-in functions
These functions are always accessible in any context, and cannot be overriden:
+(a, b, ...)
-(a)
-(a, b)
reverse(a)
antireverse(a)
left_complement(a)
right_complement(a)
geometric_product(a, b, ...)
exterior_product(a, b, ...)
interior_product(a, b)
commutator_product(a, b)
inverse(a)
exp(a)
Default symbols
Although any operation in geometric algebra may be performed using the built-in functions above, it is useful to have access to shorthands and other operators which build on these primitives. Therefore, default functions and operators are provided, as well as a few aliases and constants.
These are obtained with default_bindings
, and may be tweaked or removed if you choose to reimplement your own macro over @ga
using Expression generation utilities.
Functions
These functions define secondary operators that are more or less standard in geometric algebra. Many of these operators were extracted from E. Lengyel's PGA poster.
Function | Definition |
---|---|
antidivision | inverse_dual(division(dual(a), dual(b))) |
antiinverse | inverse_dual(inverse(dual(a))) |
antiscalar_product | geometric_antiproduct(a, antireverse(a))::e̅ |
bulk_left_complement | geometric_product(antireverse(a), 𝟙) |
bulk_norm | sqrt(interior_product(a, reverse(a)))::e |
bulk_right_complement | geometric_product(reverse(a), 𝟙) |
bulk | weight_left_complement(bulk_right_complement(a)) |
division | geometric_product(a, inverse(b)) |
exterior_antiproduct | inverse_dual(exterior_product(dual(a), dual(b))) |
geometric_antiproduct | inverse_dual(geometric_product(dual(a), dual(b))) |
geometric_norm | bulk_norm(a) + weight_norm(a) |
interior_antiproduct | inverse_dual(interior_product(dual(a), dual(b))) |
left_interior_antiproduct | exterior_product(a, right_complement(b)) |
left_interior_product | exterior_antiproduct(left_complement(a), b) |
projected_geometric_norm | antidivision(bulk_norm(a), weight_norm(a)) |
right_interior_antiproduct | exterior_product(left_complement(a), b) |
right_interior_product | exterior_antiproduct(a, right_complement(b)) |
scalar_product | geometric_product(a, reverse(a))::Scalar |
unitize | antidivision(a, weight_norm(a)) |
versor_product | geometric_product(b, a, inverse(b)) |
weight_left_complement | geometric_antiproduct(𝟏, antireverse(a)) |
weight_norm | sqrt(interior_antiproduct(a, antireverse(a)))::e̅ |
weight_right_complement | geometric_antiproduct(𝟏, reverse(a)) |
weight | bulk_left_complement(weight_right_complement(a)) |
Operators
Convenient binary operators are defined by default to allow a more compact language to perform geometric operations. Note that there is no agreed-upon convention for these, and that is why we prefer to allow more advanced users to tweak them at will:
Function | Unicode input | Expression |
---|---|---|
a ⟑ b | \wedgedot | geometric_product(a, b) |
a ⟇ b (Julia 1.10 or higher) | \veedot | geometric_antiproduct(a, b) |
a ⩒ b | \veeodot | geometric_antiproduct(a, b) |
a ⋅ b | \cdot | interior_product(a, b) |
a ● b | \mdlgblkcircle | interior_product(a, b) |
a ○ b | \bigcirc | interior_antiproduct(a, b) |
a ⦿ b | \circledbullet | scalar_product(a, b) |
a ∧ b | \wedge | exterior_product(a, b) |
a ∨ b | \vee | exterior_antiproduct(a, b) |
a ⊣ b | \dashv | left_interior_product(a, b) |
a ⊢ b | \vdash | right_interior_product(a, b) |
a ⨼ b | \intprod | left_interior_antiproduct(a, b) |
a ⨽ b | \intprodr | right_interior_antiproduct(a, b) |
a << b | versor_product(a, b) | |
a / b | division(a, b) | |
a' | reverse(a) |
In many materials about geometric algebra, the geometric product uses the same notation as the standard multiplication operator, *
(or even juxtaposition). However, we prefer to use the \wedgedot
symbol ⟑
proposed by E. Lengyel to visually show its relationship with the inner and outer products, ⋅
and ∧
, and because it allows the use of an "anti-" operator to express the dual operator to the geometric product, the geometric antiproduct ⟇
(\veedot
, available from Julia 1.10). There are also programming-related motivations, as 2x
destructures to 2 * x
which would rarely want to be considered as "the geometric product of 2 and x
".
Aliases
A few aliases are defined, with a short-hand for the inverse and a specific choice of a dual and dual inverse, along with common names for operators we named differently:
Symbol | Alias |
---|---|
inv | inverse |
dual | right_complement |
inverse_dual | left_complement |
regressive_product | exterior_antiproduct |
left_contraction | left_interior_product |
right_contraction | right_interior_product |
Constants
These constants allow you to complactly express scalar and antiscalar units.
Symbol | Input | Expression |
---|---|---|
𝟏 | \bfone | 1::e |
𝟙 | \bbone | 1::e̅ |
Type annotations
Considering an $n$-dimensional space, the various ways to annotate a value are as follows:
Annotation | Alias | Grade or basis blade |
---|---|---|
::e1 | Basis vector $e_1$ (grade 1) | |
::e12 | ::e_1_2 | Basis blade $e_1 \wedge e_2$ (grade 2) |
::e_11_12 | Basis blade $e_{11} \wedge e_{12}$ (grade 2, more than one digit per index) | |
::Scalar | ::0 , ::e | $0$ |
::Vector | ::1 | $1$ |
::Bivector | ::2 | $2$ |
::Trivector | ::3 | $3$ |
::Quadvector | ::4 | $4$ |
::Antiscalar | ::ē | $n$ |
::(k, l, ...) | Tuple of multiple elements of grade $k$, $l$, ... | |
::(k + l + ...) | Concatenation of multiple elements of grade $k$, $l$, ... | |
::Multivector | Concatenation of all elements with grade $0$ to $n$ |