# Revision history [back]

Wildcards might help you here. For instance, I got this (not ideal) way to produce what you want:

x,y,t = var('x,y,t')
f = function('f'); g = function('g')
w0 = SR.wild(0); w1 = SR.wild(1)
pattern1 = w0*f(t).diff(t,2)(t = w0); pattern2 = w0*f(t).diff(t,2)(t = -w0)
eqn = f(x*y) + f(x*(1-y)) + f((1-x)*y) + f((1-x)*(1-y)) - f(x) - f(1-x) - f(y) -f(1-y)
eqn2d = eqn.diff(x,y)
eqn2d.subs( pattern1 == g(w0) - f(t).diff(t)(t=w0), pattern2 == g(-w0) + f(t).diff(t)(t=-w0) )


Now obviously it would be nice if Sage could just notice that pattern1 is related to pattern2, but I couldn't get it to work out (maybe someone better at Sage can?). It is worth noting that I also tried using

pattern = f(t).diff(t)(t = w0) + w0*f(t).diff(t,2)(t = w0)


but eqn2d seems to have no occurrences of that pattern: eqn2d.has(pattern) returns False. I would be curious to see if anyone has an explanation for this as well.