symbolic – Define invariance for functions involving operators without built-in meaning


I am interested in defining certain functions, say $mathrm{Traco}$ that imply operators without build-in meaning, say $cdot$ (Esc . Esc).

I want to mimic a trace for it, and the main property is cyclicity, which I expect to use to simplify expressions. Now I face the problem of the last two operators being the same, as is in general, when one wants to impose some invariance.

esq(A_CenterDot) := RotateLeft@A (*rotates to the CenterDot-product*)
Traco(A_CenterDot) := Traco(esq(A)) 

Last command I was expecting to yield $ mathrm{Traco}(xcdot ycdot ycdot xcdot ycdot x)=mathrm{Traco}( ycdot ycdot xcdot ycdot xcdot x)$, as the second argument is the result of esq(x(CenterDot)y(CenterDot)y(CenterDot)x(CenterDot)y(CenterDot)x).

But this of course gives a loop. In general, how does one correct this, and if possible how to deal with situations when two arrows of the commutative diagram are the same operation”?