# 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”?