Correct, it is an encoding to represent SubManifold spaces used in the multi-linear Grassmann algebra. It might seem strange on its own, but the advantage it provides in Grassmann.jl is specialized automatic pre-compilation for differential geometric algebras based on a vector bundle manifold. For example, see https://grassmann.crucialflow.com
I feel like the readme could do with a better introduction. At the moment it seems like weird mix of mathematically technical definitions, code examples (I guess related to api specifics), and some random Julia type-system/size-limit technicalities thrown in too.
But that said, I don’t think I know anything about this sort of geometry or algebra so maybe instead I should want a paragraph telling me to give up.
Also is V"++++" the same as S"++++" (or rather, is V the same as S?), this looked like maybe the notation just changed? But like I say, I couldn’t really follow the readme so I’m likely wrong here.
The difference between V"++++" and S"++++" is that the S" specifically constructs a Signature concrete type, while the V" is for automatically selecting an appropriate type of the VectorBundle category, which is not limited to Signature specifically, making it a more general constructor call.
I'm not sure I understand how the different types in this library---Manifold, VectorBundle, SubManifold---correspond to the standard definitions of these mathematical objects. How is a manifold represented here? Can arbitrary manifolds be represented?
I think a complication is that there are abstract types and concrete types. The abstract types let you say “give me a tangent bundle where ...” and the concrete types actually implement the thing as eg a vector or a sparse vector or ...
An alternative example would be that in Julia you can talk about abstract vector types of which dense and sparse form disjoint subtypes
Indeed, the Manifold{n} type from AbstractTensors.jl (https://github.com/chakravala/AbstractTensors.jl) is defined as an abstract type in Julia. The parameter `n` is used to specify the Manifold dimension, which is locally isomorphic to R^n.
A VectorBundle is another abstract type, which standardizes an encoding format for concrete Signature and DiagonalForm types, or more. SubManifold can select subspaces of a VectorBundle or generally an arbitrary Manifold.
The design of the type system was optimized for algebra interoperability and adaptive subspace precompilation.
Okay, so say I want to do computations with differential forms on some particular manifold, like a torus or RP^n. Maybe I want to evaluate the Hodge Laplacians on some forms. What would I need to do to implement that within this system? I see references to computing Betti numbers and Euler characteristics in the documentation, so I assume something like this is possible.
I'm not very familiar with geometric algebra or its computational implementation, so apologies if this is either obvious or not even wrong. This looks very cool and useful, I just don't know how to connect it to the things I understand.
It is used as a type system for code generation and high performance calculation with discrete differential goemetry sub algebras. More information is at https://grassmann.crucialflow.com or also at https://bivector.net
17 comments
[ 3.0 ms ] story [ 47.4 ms ] threadCheck the demo
https://observablehq.com/@enkimute/animated-orbits
Join the discord
https://discord.gg/vGY6pPk
But that said, I don’t think I know anything about this sort of geometry or algebra so maybe instead I should want a paragraph telling me to give up.
Also is V"++++" the same as S"++++" (or rather, is V the same as S?), this looked like maybe the notation just changed? But like I say, I couldn’t really follow the readme so I’m likely wrong here.
https://grassmann.crucialflow.com/dev/
An alternative example would be that in Julia you can talk about abstract vector types of which dense and sparse form disjoint subtypes
A VectorBundle is another abstract type, which standardizes an encoding format for concrete Signature and DiagonalForm types, or more. SubManifold can select subspaces of a VectorBundle or generally an arbitrary Manifold.
The design of the type system was optimized for algebra interoperability and adaptive subspace precompilation.
I'm not very familiar with geometric algebra or its computational implementation, so apologies if this is either obvious or not even wrong. This looks very cool and useful, I just don't know how to connect it to the things I understand.