How to set a symbolic variable to square to zero?

asked 2022-07-15 11:20:11 +0100

Ste-r gravatar image

I am trying to encode a chain complex differential $d$ as a symbolic variable that squares to 0. The goal is encoding the simplicial structure of the Dold-Kan complex obtained from a chain complex. This is what I tried so far:

var ('p x y z omega d')
assume(d*d == 0)
#Face maps of the simplicial complex
d10(x,p) = vector(SR, [p])
d11(x,p) = vector(SR, [-d*x+p])
d20(omega,y,x,p) = vector(SR, [x,p])
d21(omega,y,x,p) = vector(SR, [y + x,p])
d22(omega,y,x,p) = vector(SR, [d*omega + y,-d*x + p])
#Degeneracy maps of the simplicial complex
s00(p) = vector(SR, [0,p])
s10(x,p) = vector(SR, [0,0,x,p])
s11(x,p) = vector(SR, [0,x,0,p])

Then, when I try to check the simplicial identity


this always evaluates to true, no matter what the input of $d_{2,2}$ is. In fact,


still returns true, when clearly


$\displaystyle -{d}^{2} \omega - {d} x - {d} y - {d} z + p$


$\displaystyle -{d} x - {d} y + p$

Am I missing something about how evaluation works or should I specify that $d^2=0$ in a different way? Any other suggestions on how to program a symbolic simplicial set or a differential as a linear symbolic function that squares to 0 are welcome.

edit retag flag offensive close merge delete



Since all your expressions are polynomial, I suggest to use polynomial rather than symbolic ring, and define the quotient ring modulo $d^2$.

Max Alekseyev gravatar imageMax Alekseyev ( 2022-07-15 14:38:13 +0100 )edit

Thank you very much for the suggestion. At first I was not sure how to define the maps as module homomorphisms in that case, but it seems like it can be done via the class FiniteRankFreeModule.

Ste-r gravatar imageSte-r ( 2022-07-15 17:25:46 +0100 )edit