# How to make noncommutative multiplication agree with commutative multiplication

I need a noncommutative multiplication that is

1. Associative
2. Distributive
3. $A**0=0$, $A**1=A$
4. Agrees with the commutative multiplication ($A**(k B)=(k A)**B=k (A**B)$)

I have found a code

Unprotect[NonCommutativeMultiply];
Clear[NonCommutativeMultiply]
(*Factor out numerics -- could generalize to some ScalarQ*)
nc : NonCommutativeMultiply[a__] /; MemberQ[{a}, _?NumericQ] :=
NCMFactorNumericQ[NCM[a]] /. NCM -> NonCommutativeMultiply
(*Simplify Powers*)
b___ ** a_^n_. ** a_^m_. ** c___ :=
NCM[b, a^(n + m), c] /. NCM -> NonCommutativeMultiply
(*Expand Brackets*)
nc : NonCommutativeMultiply[a___, b_Plus, c___] :=
Distribute[NCM[a, b, c]] /. NCM -> NonCommutativeMultiply
(*Sort Subscripts*)
c___ ** Subscript[a_, i_] **Subscript[b_, j_] ** d___ /; i > j :=
c ** Subscript[b, j] ** Subscript[a, i] ** d
Protect[NonCommutativeMultiply];

Unprotect[NCM];
Clear[NCM]
NCMFactorNumericQ[nc_NCM] :=
With[{pos = Position[nc, _?NumericQ, 1]}, Times \@@ Extract[nc, pos] Delete[nc, pos]]
NCM[a_] := a
NCM[] := 1
Protect[NCM];


Here 1, 2, 3 are satisfied and 4 is not. Could you please help me to modify it.

-
If you want it to agree with ordinary multiplication, do Unprotect[NonCommutativeMultiply]; NonCommutativeMultiply[x___]:=Times[x] (you probably also need to set its attributes to those of Times). If you want it to have a notion of scalars that get pulled out, that's a very different matter. So you really need to spell out more carefully what it is you want, if in fact it is not to make NonCommutativeMultiply into Times. – Daniel Lichtblau Mar 17 '14 at 14:58