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

(* Initialization and Rules *)
Cmt[x_,x_]:=0;
Cmt[a___, 0,             b___] := 0;
Cmt[a___, x_+y_,         b___] :=     Cmt[a,x,b]+Cmt[a,y,b];
Cmt[a___, t^n_ x_,       b___] := t^n Cmt[a,x,b];
Cmt[a___, n_ x_Cmt,      b___] := n   Cmt[a,x,b];
Cmt[a___, x_ y_,         b___] :=     Cmt[a,Expand[x y],b];
Cmt[a___, n_ X,          b___] := n   Cmt[a,X,b];
Cmt[a___, n_ Y,          b___] := n   Cmt[a,Y,b];

termaction[xx]=x; termaction[yy]=y;
termaction[n_?NumberQ x_]:=n termaction[x];
termaction[a_ x_Cmt]:=a termaction[x];
termaction[x_Cmt]:=Expand[Normal[Series[Cmt[termaction[x[[1]]],
                          termaction[x[[2]]]],{t,0,7}]]];

Cmt[z_Cmt,X]:=-Cmt[X,z];
Cmt[z_Cmt,Y]:=-Cmt[Y,z];
Cmt[Cmt[X,Y],z_Cmt]:=-Cmt[Cmt[Y,z],X]-Cmt[Cmt[z,X],Y];
Cmt[z_Cmt,Cmt[X,Y]]:=-Cmt[X,Cmt[Y,z]]-Cmt[Y,Cmt[z,X]];

Cmt[Y,X]:=-Cmt[X,Y];
Cmt[Y,Cmt[X,Cmt[X,Y]]]:=Cmt[X,Cmt[Y,Cmt[X,Y]]];

Cmt[X,Cmt[X,Cmt[X,Cmt[Y,Cmt[X,Y]]]]]:=Expand[-(
       Cmt[Y,Cmt[X,Cmt[X,Cmt[X,Cmt[X,Y]]]]]
    -2 Cmt[X,Cmt[Y,Cmt[X,Cmt[X,Cmt[X,Y]]]]])];

Cmt[Y,Cmt[X,Cmt[X,Cmt[Y,Cmt[X,Y]]]]]:=Expand[-(
    1/3 Cmt[X,Cmt[X,Cmt[Y,Cmt[Y,Cmt[X,Y]]]]] 
   -    Cmt[X,Cmt[Y,Cmt[X,Cmt[Y,Cmt[X,Y]]]]]
   -1/3 Cmt[Y,Cmt[Y,Cmt[X,Cmt[X,Cmt[X,Y]]]]])];

Cmt[Y,Cmt[Y,Cmt[X,Cmt[Y,Cmt[X,Y]]]]]:=Expand[-(
       Cmt[X,Cmt[Y,Cmt[Y,Cmt[Y,Cmt[X,Y]]]]]
    -2 Cmt[Y,Cmt[X,Cmt[Y,Cmt[Y,Cmt[X,Y]]]]])];
