Fun with higher-order derivations

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⃖