[ANN] Grassmann.jl : Differential geometric algebra

Looks great! So this is now more of a Geometric / Clifford Algebra package than a Grassmann Algebra package? Do you plan on supporting custom metrics in as a generalization to just specifying the signature?

I had tried doing something similar a while ago but got stuck figuring out a satisfactory way of supporting non-diagonal metrics.

1 Like

Roughly speaking, these algebras of Geometric / Clifford / Grassmann types are all fundamentally the same thing, with slightly different notations, formalisms, and preferences. The package itself implements conformal geometric algebra and it is named after Grassmann, who is often not adequately cited for his role in the invention of linear algebra and many other related subjects.

Yes, I do have an interest in that regard… but it is much lower on my list of design priorities. My primary goal was to get started an initial setup intended for high performance. The current setup helps facilitate the highest performance possible for most standard conformal geometric algebras.

There are a couple of ideas I got for that, but I have other goals first. You could open an issue for it?

To those interested, I opened up a new pull-request to discuss the sign value of LinearAlgebra.I when interpreted as a generalized universal pseudoscalar value

Since LinearAlgebra.I has a sign associated to it, I would like to interpret that as a minus sign, which is helpful in the theory and expressiveness of various formulas, but am opening it for discussion

Some new features have been added to fully support multivariable and higher-order dual numbers, i.e. Taylor numbers and Cartan differential forms.

The tangent map takes V to its tangent bundle and can be applied repeatedly or specified tangent(V,order) for higher.

julia> V = tangent(ℝ^3)

julia> V'

julia> V+V'

The chain rule is encoded into Grassmann algebra when a tangent bundle is used, demonstrated here symbolically with Reduce by using the dual number definition:

julia> using Grassmann, Reduce
Reduce (Free CSL version, revision 4590), 11-May-18 ...

julia> @mixedbasis tangent(ℝ^1)
(⟨+-₁¹⟩*, v, v₁, w¹, ϵ₁, ∂¹, v₁w¹, v₁ϵ₁, v₁∂¹, w¹ϵ₁, w¹∂¹, ϵ₁∂¹, v₁w¹ϵ₁, v₁w¹∂¹, v₁ϵ₁∂¹, w¹ϵ₁∂¹, v₁w¹ϵ₁∂¹)

julia> a,b = :x*v1 + :dx*ϵ1, :y*v1 + :dy*ϵ1
(xv₁ + dxϵ₁, yv₁ + dyϵ₁)

julia> a * b
x * y + (dy * x - dx * y)v₁ϵ₁

Additionally, the generalized exponential map is implemented

julia> exp(π*Λ(ℝ^2).v12)
-1.0000000000000004 + 3.3443843799521084e-16v₁₂

Unfortunately, the logarithm function is not converging yet…

This looks cool, what are some applications for Grassman algebra?

can you post a small contained practical example?

1 Like

It can be used for pretty much anything involving geometry, vectors, rotations, differentiations, etc

For example, quantum computing, automatic differentiation, differential geometry, algebraic forms, invariant theory, electric circuits, wave scattering, spacetime geometry, relativity, computer graphics, photogrammetry, and much more.

Currently, I am creating this package to learn geometric algebra itself, since I was not taught this subject and nobody explained it to me or working with me. Therefore, I am just learning it from scratch.

My goal is to implement a multi-dimensional continued fraction algorithm for special functions and also to solve the Navier-Stokes and Maxwell equations.

However, since I am somebody interested in the foundations of pure mathematics, the Applied Math aspect takes a back seat for me. My primary goal is to explore the foundations of mathematics, to make a better language for expressing complicated geometric scientific problems. In order to achieve this, I must make sure that the foundations are absolutely correct and highly extensible for many purposes. This is why I am not using Grassman for specific applications yet, to focus on foundations.

In the long-term future, I imagine that this kind of mathematics could become very central to most scientific and engineering research applications; however, it is still in early stages of development.

I would be excited to see what other people might want to do with it, there are countless possibilities.

So in conclusion, I am mainly focusing on researching the foundations of mathematics and how to combine various areas of math into a unified and efficient geometric algebra framework. In order to apply this in the future, I am doing the necessary work of constructing the underlying foundations.

In the future, I will have applications such as quantum computing and partial differential equations.


If you can point me in the general direction of an example in these areas that would be great.

I can relate

Have a look at ganja.js works in browser

For photogrammetry, this kind of math was used in the matrix movies


In v0.1.4 of Grassmann the null-basis of the conformal split has been fully incorporated into the algebra

julia> using Grassmann; @basis S"∞∅++"
(⟨∞∅++⟩, v, v∞, v∅, v₁, v₂, v∞∅, v∞₁, v∞₂, v∅₁, v∅₂, v₁₂, v∞∅₁, v∞∅₂, v∞₁₂, v∅₁₂, v∞∅₁₂)

julia> v∞^2, v∅^2, v1^2, v2^2
(0v, 0v, v, v)

julia> v∞ ⋅ v∅

julia> v∞∅^2

julia> v∞∅ * v∞, v∞∅ * v∅
(-1v∞, v∅)

julia> v∞ * v∅, v∅ * v∞
(-1 + 1v∞∅, -1 - 1v∞∅)

This provides the point at infinity v∞, the origin v∅, and the Minkowski plane v∞∅ also.


In physics, we see clifford algebras show up directly in a few different cases. There are two particularly common cases:

The first is for the creation and annihilation operators of fermions which form a clifford algebra of order 2n with signature (+ (n times), - (n times) ).

The second is for representing rotations and lorentz transforms, where you get the clifford algebras of order 3 of signature (+,+,+) to describe rotations and of order 4 with signature (+,+,+,-) in relativistic physics. In those cases it’s also useful to consider the representation theory of Clifford algebras, which gives the Gamma matrices acting on spinors.

That’s just in physics. You can use them to do a lot of other stuff conveniently as well. For example, you can use them to simplify the linear algebra that you would use when writing a raytracer.


Grassmann.jl v0.2 has now been released with many new features along with the following,

Today the first draft of the Differential geometric algebra using Leibniz, Grassmann paper is released:


This is supposed to be my submission for the JuliaCon 2019 proceesings, with 6-page limit it has to be concise to introduce the most important concepts and nuances. Later a more detailed a longer version will also be published. If anybody has comments about topics that could be expanded on in these papers, it could be directed to either this concise version or to the longer version in the future.

The source is made available here and here with the PDF linked from DropBox.


Next week at JuliaCon I will be giving a lightning talk on the Grassmann.jl package, I’d like to know if anyone is interested in meeting afterwards so I can answer a few questions or discuss applications you have in mind.


With v0.3.1 of Grassmann.jl it is now fairly stable to work with higher-order generalizations of derivations.

Using the tangent(V,D,#) space it is possible to explore the higher order Leibniz derivations.

Based on the definitions of differential geometric algebra, a higher order derivation is ∂i^(D+1)==0:

julia> using Reduce, Grassmann; @mixedbasis tangent(ℝ^2,3,2);

julia> x = :x*v1 + ∂1v1 + ∂1*∂1v1 + ∂1*∂1*∂1v1
0.0 + xv₁ + (1 + (1 + 1∂₁)∂₁)∂₁v₁

julia> x^2
x ^ 2 + (2x + (2x + 1 + (2 * (x + 1))∂₁)∂₁)∂₁

julia> x^3
0.0 + (x ^ 3)v₁ + (3 * x ^ 2 + (3 * (x + 1) * x + (3 * x ^ 2 + 6x + 1)∂₁)∂₁)∂₁v₁

julia> x^7
0.0 + (x ^ 7)v₁ + (7 * x ^ 6 + (7 * (x + 3) * x ^ 5 + (7 * (x ^ 2 + 6x + 5) * x ^ 4)∂₁)∂₁)∂₁v₁

julia> x^8
x ^ 8 + (8 * x ^ 7 + (4 * (2x + 7) * x ^ 6 + (8 * (x ^ 2 + 7x + 7) * x ^ 5)∂₁)∂₁)∂₁

julia> x^11
0.0 + (x ^ 11)v₁ + (11 * x ^ 10 + (11 * (x + 5) * x ^ 9 + (11 * (x ^ 2 + 10x + 15) * x ^ 8)∂₁)∂₁)∂₁v₁

As you can see, this is the 3rd order Leibniz-Taylor algebra. Arbitrary Leibniz-Taylor algebras are supported.

julia> V(∇)
0v₁₂ + 1∂₁v₁ + 0∂₂v₁ + 0∂₁v₂ + 1∂₂v₂ + 0∂₁₂

julia> V(∇)^2
0 + 1∂₁∂₁ + 1∂₂∂₂

julia> V(∇)^3
0.0 + 1∂₁∂₁∂₁v₁ + 1∂₂∂₂∂₂v₂ + 1∂₂∂₁₂v₁ + 1∂₁∂₁₂v₂

julia> V(∇)^4

By having GeometryTypes.Point interoperability, the Grassmann is now compatible with Makie:

using Grassmann, Makie
@basis S"∞+++" # 4D, Riemann sphere
sub = V(2,3,4) # 3D, SubManifold
glines(f,r=-2π:0.0001:2π) = lines([Point(sub(Grassmann.vector(f(t)))) for t ∈ r]);
f(t) = ↓(exp(t*v∞*(sin(3t)*3v1+cos(2t)*7v2-sin(5t)*4v3)/2)>>>↑(v1+v2-v3));
glines(f) # make plot in Makie

Note that Point(sub(Grassmann.vector(f(t)))) is used to convert the TensorAlgebra into the required GeometryTypes.Point format for AbstractPlotting.

Preferably, I’d like to completely bypass the Point abstraction and just directly plot and compute with the multivector TensorAlgebra type system… but I might need some help from @sdanisch for that.


That’s awesome. :blush:

1 Like

Wow, yeah this is great!

1 Like

As you are pioneering new solutions in the Geometric Algebra space, am reminded of a work of art by Hilma af Klint, a pioneer in Abtract Art. Note the resemblance to “Group V, The Seven-Pointed Star, No. 1n”, a piece from 1908 in the Guggenheim Museum:

(More info here if you wish: https://www.artsy.net/article/artsy-editorial-swedish-mystic-hilma-af-klint-invented-abstract-art)

1 Like

It’s also possible to work with streamplot using a new vectorfield outermorphism generator:

This here is one snapshot of the same projective torus and helix topology based on bivectors.

Differential geometric algebra paper will be updated very soon in a few days with new info.


Differential geometric algebra JuliaCon 2019 paper has been finalized and documentation updated:


YouTube DropBox BiVector

v0.3.3 has been tagged https://github.com/chakravala/Grassmann.jl

Since it is halloween tonight, try out the new skeleton, betti, and χ methods for Morse theory.


Documentation website https://grassmann.crucialflow.com has now been created for v0.4.0 release:

Docs Stable Docs Dev Gitter BiVector

New features include vastly improved performance for low dimensional algebras (for ℝ^5 and less) and vastly improved performance of exp function for various special cases, +(many other improvements).