## Where communities thrive

• Join over 1.5M+ people
• Join over 100K+ communities
• Free without limits
##### Activity
Dream Scatter
@chakravala
hmmm thats a great observation though, with integer vs float, I'm gonna think about it
Timo Kluck
@tkluck
i.e. something akin to
julia> 10E30 + -10E30 + 1
1.0

julia> 10E30 + (-10E30 + 1)
0.0
cool! I'll probably drop offline and let you handle it :) hope this was useful
want to post on discourse when you found it?
Dream Scatter
@chakravala
yes, I will update discourse if I figure it out, please do keep investigating if you would like to help again, thanks!
Dream Scatter
@chakravala
@tkluck by the way, you will get the one(::Type{Any}) method available if you also using Reduce, Grassmann, that might help resolve some of the other issues with BigFloat in Grassmann, I will try to improve support for it though
David Millard
@dmillard
Hi! Please excuse my ignorance, I'm currently learning about Grassmann algebra and certainly don't grasp much of the subtlety. I'm reading Dorst & Mann, Geometric Algebra for Computer Science. There, they define an inner product called the contraction product, "⌋", defined implicitly as (X ∧ A) * B = X * (X ⌋ B). What does this correspond to in Grassman.jl? I see there is an inner product "⋅" defined, are these the same? As I work through the book, I'd like to play along using Grassmann.jl to build intuition. Thanks!
Dream Scatter
@chakravala
Thank you for joining, indeed Grassmann has that contraction product, which is the < operator. That is also known as the left contraction... alternatively you can use the right contraction > instead (or ⋅ alternatively).
So, in Grassmann I have provided both the left and right contractions, but I personally consider the right contraction more fundamental than the left one, while Dorst considers the left more important and fundamental. In the package, I provide both methods, but have made the right contraction default when ⋅ is used at the moment.
David Millard
@dmillard
Thank you for the quick reply! What's a recommended way to explore the available products? Browsing algebra.jl is currently a little overwhelming for me. Let me know if you're interested in docs PRs, I'm happy to contribute as I stumble along. Thanks for such a cool package, I'm really looking forward to using it more.
Dream Scatter
@chakravala
You're welcome to make documentation PR's if you really want to. Most of it is documented in
David Millard
@dmillard
This is what I was looking for - somehow I missed it. Thanks!
Dream Scatter
@chakravala
Just committed some basic doc strings to initialize the documentation
Luke Burns
@lukeburns
@chakravala can I construct a clifford algebra over a tensor product of vector spaces with a custom inner product?
Luke Burns
@lukeburns
I'm interesting in working with Doran/Lasenby's multiparticle spacetime algebra: $Cl(\mathbb{R}^n_{1,3})$ with the inner product $v^2 = v_\mu^i v_\nu^j \eta^{\mu \nu} \delta_{i j}$
Dream Scatter
@chakravala
yes, the inner product can be customized based on a metric with the DirectSum package. you can add up to 64 indices, but the product operations have not been fully optimized for sparsity at very high dimensions yet
Luke Burns
@lukeburns
Thanks, realize it's just $\mathcal{Cl}(\mathbb{R}_{n,3n})$
Direct sum not tensor product
Dream Scatter
@chakravala
Have you tried @basis ℝ'⊕ℝ^(3n) for that yet?
Luke Burns
@lukeburns
Yeah just went with e.g. @basis V"++------"
Everything works great!
Dream Scatter
@chakravala
You can also use basis"++------" or @basis ℝ^2⊕(ℝ^6)' there are multiple ways
Luke Burns
@lukeburns
Ah! thx
Dream Scatter
@chakravala
Let me know your feedback, there are lots of improvements planned, although I have taken a break recently
Luke Burns
@lukeburns
Will do.
I will be very interested in optimizations in higher dimensions.
Dream Scatter
@chakravala
The newer SparseChain and MultiGrade types will help with that, but it takes a significant amount of extra effort to incorporate those in a type stable way, if you'd like to encourage me please consider donating at https://liberapay.com/chakravala
Luke Burns
@lukeburns
Done. Great work!
One more question: I'm interested in constructing quotient algebras, subject to certain (one-sided) equivalence relations (e.g. MSTA is really $\mathcal{Cl}(\mathbb{R}^n_{1,3})/Q$). Is it possible to do this with your library? I imagine this is much more complicated to implement, but thought I'd ask, since the implementation seems quite solid.
Luke Burns
@lukeburns

E.g. The equivalence relation: for $a,b \in \mathcal{Cl}(\mathbb{R}^n_{1,3})$,

$a \sim b \iff (a - b)p = 0$ and $a-b \neq 0$

for some $p$ that generates the left principal ideal $Q$

Dream Scatter
@chakravala
Could you give me a more detailed construction of it?
Luke Burns
@lukeburns
\neq ^
Err MSTA is actually a right quotient algebra, in which case $a \sim b \iff p(a - b) = 0$ and $a-b \neq 0$
Dream Scatter
@chakravala
well, I imagine at the very least you would be able to define such an equivalence relation in Julia which checks that condition
Luke Burns
@lukeburns
hmm. does your implementation actually generate geometric algebras by quotienting tensor algebras by a quadratic form?
Dream Scatter
@chakravala
while I have theoretically based my algebras on the foundations of the equivalence relations discussed in my paper, I don't have an actual equivalence relation defined in Julia, this is just a theoretical foundation to help explain how to step-by-step derive the theory
Luke Burns
@lukeburns
gotcha
i imagine that's not particularly performant
Dream Scatter
@chakravala
in reality, I only ever deal with tensors with ordered indices, so I always have an increasing index like v123 for example, which is equal to v231 by the equivalence relation, but there is no need to create a separate instance of the class
I only need one instance of the class, so I only need v123 and don't need a representation for v231
in my calculations, I automatically make sure the indices are sorted, so I always use the increasing order, requiring a single element for from the equivalence class for representation
so yes, I imagine it would be less performance if I had to also account for the other equivalent representations (for exterior algebra)
Luke Burns
@lukeburns
I see
Dream Scatter
@chakravala
also, note that if you read my paper, the foundations I use are built up in a (innovative in my opinion) way that is different from the Clifford algebra constructions you may be used to, I am using a system I call "differential geometric algebra" and it is based on a generalization of the Clifford product, which I call the geometric algebraic product, which is a slightly more general definition
I've invited people to comment on the foundations of differential geometric algebra on the forumhere https://discourse.bivector.net/t/differential-geometric-algebra-using-leibniz-grassmann/27
Timo Kluck
@tkluck
@chakravala It looks like the stable link on the announce post is broken, is that possible?
Dream Scatter
@chakravala
@tkluck yes that is broken, the stable docs never got generated when I pushed v0.4 and I don't know why yet, maybe you can figure out why, but the /dev docs are indeed available
Dream Scatter
@chakravala
@tkluck the stable docs have now been fixed as of v0.5 by the way