(*                          Ren-Cang Li, June 1, 1996
                            na.rcli@na-net.ornl.gov   *)

(* Definitions *)
Mm[x_,y_+z_]:=Mm[x,y]+Mm[x,z]; Mm[x_+y_,z_]:=Mm[x,z]+Mm[y,z];
Mm[a___,x_ X, b___]:=x Mm[a,Y,b];
Mm[a___,x_ Y, b___]:=x Mm[a,X,b];
Mm[a___,x_ y_Mm, b___]:=x Mm[a,y,b];
Mm[a___,0,b___]:=0; 
Mm[a___,n_?NumberQ x_, b___]:=n Mm[a,x,b];

SetAttributes[Mm, Flat];
Cmt[x_,y_]:=Mm[x,y]-Mm[y,x];

(* Think commutators as vectors over a basis spanned by Mm[..., {X,Y}, ...] *)

(* Rule for [X,[X,[X,Y]]]=0 *)
Mm[a___,X,X,X,Y,b___]=Expand[
     3 Mm[a,X,X,Y,X,b]-3 Mm[a,X,Y,X,X,b]+Mm[a,Y,X,X,X,b]];

