Is there a way to change operator precedence for built-in symbols?
I'd like \[TensorProduct] (which I redefine to KroneckerProduct) to take precedence after dot, so that the following is true
A.B\[TensorProduct]C.D == (A.B)\[TensorProduct](C.D)
Is there a way to change operator precedence for built-in symbols?
I'd like \[TensorProduct] (which I redefine to KroneckerProduct) to take precedence after dot, so that the following is true
A.B\[TensorProduct]C.D == (A.B)\[TensorProduct](C.D)
If you enter \[TensorProduct] using the input alias t*, then you can override the input alias to produce a TemplateBox with a SyntaxForm setting to lower the precedence:
CurrentValue[EvaluationNotebook[], {InputAliases,"t*"}]=TemplateBox[
{},
"TensorProduct",
DisplayFunction->("\[TensorProduct]"&),
InterpretationFunction:>(Sequence["~","TensorProduct","~"]&),
SyntaxForm->"*"
];
Your example (as an image to show the alias in action):
TensorProductaHoldAllattribute and define downvalues (to TensorProduct) when aDotobject appears inTensorProduct. – jjc385 Apr 19 '17 at 16:24\[TensorProduct]toKroneckerProduct? – jjc385 Apr 19 '17 at 16:35TensorProduct=KroneckerProduct– Yaroslav Bulatov Apr 19 '17 at 20:14CircleTimes = KroneckerProductand thenA.B\[CircleTimes]C.D– chuy Apr 20 '17 at 16:46