Sympy manipulation of wedge products

55 Views Asked by At

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?

0

There are 0 best solutions below