# [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.

9 Likes

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

2 Likes

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∅
-1v

julia> v∞∅^2
v

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.

2 Likes

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.

3 Likes

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.

13 Likes

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.

4 Likes

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
0.0v⃖
``````
7 Likes

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.

17 Likes

That’s awesome. 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:

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.

6 Likes

Differential geometric algebra JuliaCon 2019 paper has been finalized and documentation updated: 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.

10 Likes

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

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).

7 Likes