Hello Alexei, maybe I should explain why I need non-commutative symbols. Without them, this code: #include <ginac/ginac.h> using namespace GiNaC; int main() { symbol M1("M1"); symbol x("x"), y("y"); matrix M2(2,2); M2 = x, 0, y, 0; matrix M3(2,2); M3 = 0, x, x, 0; symbol M4("M3"); ex nc; nc = M1 * M4; nc = nc.subs(M1 == M2); nc = nc.subs(M4 == M3); nc.evalm(); } throws matrix::mul_scalar(): non-commutative scalar Is that the expected behaviour?
2. The patch is a bit mathematically inconsistent: - Non-commutative realsymbol and possymbol hardly make any sense. - symbol::domain() still says domain::complex. This is very confusing. Non-commutative complex numbers? What's that? sorry, I am a mechanical engineer :-)
All in all, just because making symbols non-commutative is technically possible doesn't mean it's a good idea. If you really need something like a non-commutative symbol, it's much safer (and in fact easier) to write a proper class (which inherits from basic). OK, I will do that. But if I read your other explanations correctly, even a separate class will not really solve the problem I described above?
Best regards, Jan