Following Vladimir's :) instructions... I implemented it, but I've found a problem with the output, probably due to my lack of knowledge :(. For reference the listing is --- //c++ clifford.cc -o clifford -lcln -lginac #include <iostream> using namespace std; #include <ginac/ginac.h> using namespace GiNaC; int main() { varidx nu(symbol("nu", "\\nu"), 3), mu(symbol("mu", "\\mu"), 3), xi (symbol("xi", "\\xi"), 3), rho(symbol("rho", "\\rho"),3); ex basis1 = clifford_unit(mu, diag_matrix(lst(1, 1, 1))); ex basis2 = clifford_unit(nu, diag_matrix(lst(1, 1, 1))); symbol a1("a1"),a2("a2"),b1("b1"),b2("b2"),c1("c1"),c2("c2"); ex vector1 = lst_to_clifford(lst(a1,b1,c1), rho, basis1); ex vector2 = lst_to_clifford(lst(a2,b2,c2), rho, basis1); cout << 2*vector1+vector2 << endl; cout << 2*vector1*vector2 << endl; cout << lst_to_clifford(lst(1, 0, 0), rho, basis1) + lst_to_clifford(lst (0, 1, 0), rho, basis1) << endl; return 0; } --- And the output $ ./clifford 2*[[a1],[b1],[c1]].rho*e~rho+e~rho*[[a2],[b2],[c2]].rho 2*[[a1],[b1],[c1]].rho*ONE*[[a2],[b2],[c2]].rho*e~rho~rho [[0],[1],[0]].rho*e~rho+e~rho*[[1],[0],[0]].rho As it can be see the elements, [[a1],[b1],[c1]].rho, seem indivisible. There are not trivial groupings being made, like, [[0],[1],[0]].rho*e~rho+e~rho*[[1],[0],[0]].rho -> [[1],[1], [0]].rho*e~rho I tried to simplify_indexed but the result keeps the same. Also at the tutorial, when dealing with generic clifford algebras, refered Ginac output for elements of a Clifford Algebra are reflected as v~0 e.0 + v~1 e.1 + ... + v~n e.n so exhibiting that they are some how divisible. Also covariant and contravariant indexes are interchanged in comparison with the tutorial. Any clues???. Thanks for your help Javier Ros