Hello all, I'm new to GiNaC, but so far I've been very impressed by its power. But, I seem to be having a problem with the substitutions, can anyone tell me what I'm doing wrong? A short example is the following code: ---- #include <iostream> #include <ginac/ginac.h> using namespace std; using namespace GiNaC; ////////////////////////////////////////////////////////////// // delta( c_i, c_j ) = 1 if c_i==c_j otherwise 0 DECLARE_FUNCTION_2P(delta); REGISTER_FUNCTION(delta, dummy()); ////////////////////////////////////////////////////////////// int main(int argc, char **argv) { symbol q("q"), c0("c0"), c1("c1"), c2("c2"); ex poly( (1-delta(c0,c1))*(1-delta(c0,c2)) ); poly=poly.expand(); cout << "START : " << poly << endl; poly = poly.subs( 1 == q ); cout << "sub 1 => q : " << poly << endl; return 0; } ---- which gives the output: ---- START : 1-delta(c0,c2)-delta(c0,c1)+delta(c0,c2)*delta(c0,c1) sub 1 => q : 1-delta(c0,c2)-delta(c0,c1)+delta(c0,c2)*delta(c0,c1) ---- which is not what I would expect. I've also tried using the 'numeric' type instead of the literal 1's, but get the same effect. Am I missing something? BTW, for anyone interesed in the point of this, I'm trying to implement the algorithm in this paper: http://www.iop.org/EJ/abstract/1367-2630/11/2/023001/ Thanks in advance! Jeremy