(* ::Package:: *)

BCH[b_, x_, y_] := Module[
{BCH8,B, X, Y, Ev},
BCH8 = B[X,Y]/2+B[X,B[X,Y]]/12-B[X,B[X,B[X,B[X,Y]]]]/720+B[X,B[X,B[X,B[X,B[X,B[X,Y]]]]]]/30240-B[X,B[X,B[X,B[X,B[X,B[Y,B[X,Y]]]]]]]/20160-B[X,B[X,B[X,B[X,B[Y,B[X,Y]]]]]]/10080+B[X,B[X,B[X,B[X,B[Y,B[Y,B[X,Y]]]]]]]/20160-B[X,B[X,B[X,B[Y,B[X,Y]]]]]/1440+B[X,B[X,B[X,B[Y,B[X,B[X,B[X,Y]]]]]]]/12096-B[X,B[X,B[X,B[Y,B[X,B[Y,B[X,Y]]]]]]]/5040-B[X,B[X,B[X,B[Y,B[Y,B[X,Y]]]]]]/7560-(5*B[X,B[X,B[X,B[Y,B[Y,B[Y,B[X,Y]]]]]]])/24192-B[X,B[X,B[Y,B[X,Y]]]]/120+B[X,B[X,B[Y,B[X,B[X,B[X,Y]]]]]]/2520+B[X,B[X,B[Y,B[X,B[X,B[Y,B[X,Y]]]]]]]/3360+B[X,B[X,B[Y,B[X,B[Y,B[X,Y]]]]]]/3360+B[X,B[X,B[Y,B[X,B[Y,B[Y,B[X,Y]]]]]]]/2520-B[X,B[X,B[Y,B[Y,B[X,Y]]]]]/720-B[X,B[X,B[Y,B[Y,B[Y,B[X,Y]]]]]]/3360+B[X,B[X,B[Y,B[Y,B[Y,B[Y,B[X,Y]]]]]]]/20160-B[X,B[Y,B[X,Y]]]/24+B[X,B[Y,B[X,B[X,B[X,Y]]]]]/720-B[X,B[Y,B[X,B[X,B[X,B[X,B[X,Y]]]]]]]/20160-B[X,B[Y,B[X,B[X,B[X,B[Y,B[X,Y]]]]]]]/6720+B[X,B[Y,B[X,B[X,B[Y,B[X,Y]]]]]]/1680+B[X,B[Y,B[X,B[X,B[Y,B[Y,B[X,Y]]]]]]]/15120+B[X,B[Y,B[X,B[Y,B[X,Y]]]]]/240-B[X,B[Y,B[X,B[Y,B[X,B[X,B[X,Y]]]]]]]/10080-B[X,B[Y,B[X,B[Y,B[X,B[Y,B[X,Y]]]]]]]/2016+B[X,B[Y,B[X,B[Y,B[Y,B[X,Y]]]]]]/1260-B[X,B[Y,B[X,B[Y,B[Y,B[Y,B[X,Y]]]]]]]/20160-B[X,B[Y,B[Y,B[X,Y]]]]/360+B[X,B[Y,B[Y,B[X,B[X,B[Y,B[X,Y]]]]]]]/20160-B[X,B[Y,B[Y,B[X,B[Y,B[Y,B[X,Y]]]]]]]/10080+B[X,B[Y,B[Y,B[Y,B[X,Y]]]]]/1440+B[X,B[Y,B[Y,B[Y,B[Y,B[X,Y]]]]]]/10080-B[X,B[Y,B[Y,B[Y,B[Y,B[Y,B[X,Y]]]]]]]/60480-B[Y,B[X,Y]]/12+B[Y,B[X,B[X,B[X,Y]]]]/360-B[Y,B[X,B[X,B[X,B[X,B[X,Y]]]]]]/10080-B[Y,B[X,B[X,B[X,B[Y,B[X,Y]]]]]]/3360+B[Y,B[X,B[X,B[Y,B[Y,B[X,Y]]]]]]/7560+B[Y,B[X,B[Y,B[X,Y]]]]/120-B[Y,B[X,B[Y,B[X,B[X,B[X,Y]]]]]]/5040-B[Y,B[X,B[Y,B[X,B[Y,B[X,Y]]]]]]/1008-B[Y,B[X,B[Y,B[Y,B[Y,B[X,Y]]]]]]/10080+B[Y,B[Y,B[X,B[X,B[Y,B[X,Y]]]]]]/10080-B[Y,B[Y,B[X,B[Y,B[Y,B[X,Y]]]]]]/5040+B[Y,B[Y,B[Y,B[X,Y]]]]/720-B[Y,B[Y,B[Y,B[Y,B[Y,B[X,Y]]]]]]/30240;
Ev[X]=x; Ev[Y]=y;
Ev[B[u_, v_]] := Ev[B[u,v]] = b[Ev[u], Ev[v]];
Expand[x+y+(BCH8 /. B[u_,v_] :> Ev[B[u,v]])]
]


(* ::Input:: *)
(*b[s1_String, s2_String] := (s1<>s2 - s2<>s1 /. s_String /; StringLength[s]>5 :> 0);*)
(*b[x_,0] = 0;*)
(*b[0,y_] = 0;*)
(*b[c_?NumberQ*x_, y_] := Expand[c*b[x,y]];*)
(*b[x_, c_?NumberQ*y_] := Expand[c*b[x,y]];*)
(*b[x_Plus, y_] := b[#,y]& /@ x;*)
(*b[x_, y_Plus] := b[x, #]& /@ y;*)


(* ::Input:: *)
(*BCH[b, "x", "y"]*)


(* ::Input:: *)
(*rgt=BCH[b, "x", BCH[b, "y", "z"]]*)


(* ::Input:: *)
(*lft=BCH[b, BCH[b, "x", "y"], "z"]*)


(* ::Input:: *)
(*lft-rgt*)
