Skip to content

NonCommutativeMultiply ​

The ordered product, for units that anticommute. ×\times cannot host one: Multiply is declared commutative, so canonicalisation sorts its operands before any handler runs and the sign is lost.

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageNonCommutativeMultiply!
NonCommutativeMultiply(a, b, …)the product of the operands, in the order written
GeometricProduct(a, b, …)alias, for the geometric-algebra reading
a \otimes binfix alias (⊗\otimes)
Typed signatures
TypePackageApplies
untypedhypercomplexalways
(number*) -> numberstructuresalways

Domain: Structures

Details
  • Wolfram spells this head the same way (infix **), keeping it apart from Times; matrix multiplication is likewise its own head, Dot
  • On the COMMUTING families it simply agrees with ×\times, so it is safe to use everywhere
  • A tensor product of two scalars is their product, so 2⊗32 \otimes 3 is 66
  • Associative across mixed families: the commutation factor ε(g,h)=(−1)anti(g)anti(h)\varepsilon(g,h) = (-1)^{\mathrm{anti}(g)\mathrm{anti}(h)} is a bicharacter
  • Juxtaposition carries the sign on its own -- e2e1e_2e_1 is caught before Multiply's commutative sort can reach it
  • An explicit ×\times or ⋅\cdot is not: it parses straight to a sorted Multiply, so it REFUSES two distinct anticommuting units rather than assert a sign it cannot justify

Examples

Basic #

the canonical order

live ↗
InNonCommutativeMultiply(e1,e2)\mathrm{NonCommutativeMultiply}(e_1, e_2)Oute1e2e_1e_2

Symbolic products are held, and identical ones compare equal

live ↗
InNonCommutativeMultiply(a,b,c)=NonCommutativeMultiply(a,b,c)\mathrm{NonCommutativeMultiply}(a, b, c)=\mathrm{NonCommutativeMultiply}(a, b, c)OutTrue\mathrm{True}
live ↗
In{ab=abNonCommutativeMultiply(a,b)=NonCommutativeMultiply(b,a)\begin{cases}ab=ab\\\mathrm{NonCommutativeMultiply}(a, b)=\mathrm{NonCommutativeMultiply}(b, a)\end{cases}Out[True,NonCommutativeMultiply(a,b)=NonCommutativeMultiply(b,a)]\bigl\lbrack\mathrm{True}, \mathrm{NonCommutativeMultiply}(a, b)=\mathrm{NonCommutativeMultiply}(b, a)\bigr\rbrack
Scope #

scalars: the implied identity factor

live ↗
In2⊗32⊗3Out66

commuting units: agrees with ×\times

live ↗
Ini2⊗i1i_2⊗i_1Outi1i2i_1i_2
Applications #

the quaternion product (1+2i+3j+4k)(2−i+j−3k)=13−10i+9j+10k(1+2i+3j+4k)(2-i+j-3k) = 13-10i+9j+10k, with i=f1i = f_1, j=f2j = f_2, k=f1f2k = f_1f_2

live ↗
InNonCommutativeMultiply(1+2f1+3f2+4f1f2,2−f1+f2−3f1f2)\mathrm{NonCommutativeMultiply}(1+2f_1+3f_2+4f_1f_2, 2-f_1+f_2-3f_1f_2)Out10f1f2−10f1+9f2+1310f_1f_2-10f_1+9f_2+13
Properties #

reversing the operands flips the sign

live ↗
InNonCommutativeMultiply(e2,e1)\mathrm{NonCommutativeMultiply}(e_2, e_1)Out−(e1e2)-(e_1e_2)

(e1e2)2=−1(e_1e_2)^2 = -1

live ↗
InNonCommutativeMultiply(e1,e2,e1,e2)\mathrm{NonCommutativeMultiply}(e_1, e_2, e_1, e_2)Out−1-1

associative: nested products flatten

live ↗
InNonCommutativeMultiply(a,NonCommutativeMultiply(b,c))\mathrm{NonCommutativeMultiply}(a, \mathrm{NonCommutativeMultiply}(b, c))OutNonCommutativeMultiply(a,b,c)\mathrm{NonCommutativeMultiply}(a, b, c)

undeclared symbols aren't assumed to commute, so the order is kept

live ↗
InNonCommutativeMultiply(b,a)\mathrm{NonCommutativeMultiply}(b, a)OutNonCommutativeMultiply(b,a)\mathrm{NonCommutativeMultiply}(b, a)
live ↗
In[NonCommutativeMultiply(0,a),NonCommutativeMultiply(1,a)]\bigl\lbrack\mathrm{NonCommutativeMultiply}(0, a), \mathrm{NonCommutativeMultiply}(1, a)\bigr\rbrackOut[NonCommutativeMultiply(0,a),NonCommutativeMultiply(1,a)]\bigl\lbrack\mathrm{NonCommutativeMultiply}(0, a), \mathrm{NonCommutativeMultiply}(1, a)\bigr\rbrack
live ↗
InNonCommutativeMultiply(a+b,c)−ac\mathrm{NonCommutativeMultiply}(a+b, c)-acOutNonCommutativeMultiply(a+b,c)−ac\mathrm{NonCommutativeMultiply}(a+b, c)-ac
Possible issues #

plain ×\times declines: both orders arrive identical

live ↗
Ine2e1e_2e_1Oute1e2e_1e_2

A single factor is just itself

live ↗
InNonCommutativeMultiply(a)\mathrm{NonCommutativeMultiply}(a)Outaa
About
Examples14
Checked againstWolfram Language 8 agree2 differ4 unevaluatedSageMath 6 agreeSymPy 1 agree
CrosswalkWolfram Language

Implementation

mappedsagepackages/oracle/src/mappings.ts

See also: Norm, Basis, Quaternions