I've been trying to manipulate p-forms on Manifolds using SymPy. However, I've been struggling trying to construct more sophisticated differential forms. Consider the example bellow:
from sympy import *
from sympy.diffgeom import *
M = Manifold("M", 7)
U = Patch('U', M)
x1, x2, x3, y0, y1, y2, y3 = symbols('x1 x2 x3 y0 y1 y2 y3')
Can = CoordSystem('Can', U, (x1, x2, x3, y0, y1, y2, y3))
dx1, dx2, dx3, dy0, dy1, dy2, dy3 = Can.base_oneforms()
e_x1, e_x2, e_x3, e_y0, e_y1, e_y2, e_y3 = Can.base_vectors()
vol7 = WedgeProduct(dx1, dx2, dx3, dy0, dy1, dy2, dy3)
phi = (WedgeProduct(dx1, dx2, dx3) - WedgeProduct(dx1, dy2, dy3) - WedgeProduct(dy1, dx2, dy3) - WedgeProduct(dy1, dy2, dx3) -WedgeProduct(dy0, dx1, dy1) - WedgeProduct(dy0, dx2, dy2) - WedgeProduct(dy0, dx3, dy3))
psi = (WedgeProduct(dy0, dy1, dy2, dy3) - WedgeProduct(dy0, dy1, dx2, dx3) - WedgeProduct(dy0, dx1, dy2, dx3) - WedgeProduct(dy0, dx1, dx2, dy3) - WedgeProduct(dx2, dy2, dx3, dy3) - WedgeProduct(dx3, dy3, dx1, dy1) - WedgeProduct(dx1, dy1, dx2, dy2))
In this example, type(phi) and type(psi) is sympy.core.add.Add. I think this is creating the behavior
WedgeProduct(Phi, Psi)= dx1∧dx2∧dx3−dx1∧dy2∧dy3−dy0∧dx1∧dy1−dy0∧dx2∧dy2−dy0∧dx3∧dy3−dy1∧dx2∧dy3−dy1∧dy2∧dx3∧−dx1∧dy1∧dx2∧dy2−dx2∧dy2∧dx3∧dy3−dx3∧dy3∧dx1∧dy1−dy0∧dx1∧dx2∧dy3−dy0∧dx1∧dy2∧dx3−dy0∧dy1∧dx2∧dx3+dy0∧dy1∧dy2∧dy3
(different from the expected WedgeProduct(Phi, Psi) = 7*vol7). That is, WedgeProduct(Phi, Psi) is not behaving like a Wedge Product of a 3-form by a 4-form. How can I properly construct this WedgeProduct(Phi, Psi) 7-form? I.e., how to sum, mult, etc. differential forms in SymPy?