NOTE: I'm using one week old CVS version. I'm playing with rotations in Cl3, following with my previous mail basis definition. I'm implementing the following trivial rotation ex R=(cos(theta/2)*dirac_ONE(0)-e00*e01*sin(theta/2)); cout << "subs Rotation R * e00 * R^\\dag = " << canonicalize_clifford((R * e00 * clifford_star(R)).expand()) << endl; That wonderfully (wonderfully!!!) gives: Rotation R * e00 * R^\dag = 2*e~1*sin(1/2*theta)*cos(1/2*theta)-sin(1/2*theta)^2*e~0 +e~0*cos(1/2*theta)^2 I'm trying to trigonometrically simmplify, 2*cos(1/2*theta)*e~1*sin(1/2*theta) -----to---> sin(theta) To that end: cout << "subs Rotation R * e00 * R^\\dag = " << canonicalize_clifford((R * e00 * clifford_star(R)).expand()).subs(lst(2*sin(1/2*theta)*cos(1/2*theta)==sin(theta))) << endl; that gives subs Rotation R * e00 * R^\dag = 2*e~1*sin(1/2*theta)*cos(1/2*theta)+e~(sin(theta))*cos(1/2*theta)^2-sin(1/2*theta)^2*e~(sin(theta)) Also, if I use cout << "subs Rotation R * e00 * R^\\dag = " << canonicalize_clifford((R * e00 * clifford_star(R)).expand()).subs(lst(2*sin(1/2*theta)*cos(1/2*theta)==sin(theta)),subs_options::algebraic) << endl; I get the same result subs Rotation R * e00 * R^\dag = 2*e~1*sin(1/2*theta)*cos(1/2*theta)+e~(sin(theta))*cos(1/2*theta)^2-sin(1/2*theta)^2*e~(sin(theta)) I think this is a bug. ???? Have a nice weekend! Javier