It's a little unclear what you're asking for, but I think what you want is not easy to achieve in any system. First, let me note that KroneckerProduct
is correctly computing what you want:
splus = {{0, 1}, {0, 0}};
sminus = Transpose[splus];
id = IdentityMatrix[2];
KroneckerProduct[id, id, splus].KroneckerProduct[id, id, sminus] ==
KroneckerProduct[id, id, {{1, 0}, {0, 0}}]
(* True *)
Now, you make claim the output isn't what you want, but you want it to look like the RHS of your formula. So I guess you want the literal output TensorProduct[id, id, {{1,0},{0,0}}]
. Well, this mixture of explicit and symbolic results its really hard to get to in any system, since it can't read your mind about which symbols to keep and which to expand out. Also, notice that id
is not a symbolic representation of the identity matrix but rather an expliict matrix:
id (* aka IdentityMatrix[2] *)
(* {{1, 0}, {0, 1}} *)
If you want manipulate matrices symbolically, you should use the assumptions mechanism and TensorReduce
or TensorExpand
. In this case, TensorExpand
gives us a useful representation of your LHS. For any two $2\times2$ matrices id2
and sp
we have:
Assuming[
{(id2 | sp) \[Element] Matrices[{2, 2}]},
TensorExpand[KroneckerProduct[id2, id2, sp].KroneckerProduct[id2, id2, Transpose[sp]]]
]
(* KroneckerProduct[MatrixPower[id2, 2], MatrixPower[id2, 2], sp.Transpose[sp, {2, 1}]] *)
(The Transpose[sp,{2,1}]
is just an explicit form of Transpose
, saying you are transposing the first two levels of the array. Obviously, for a matrix those are the only levels.) Since we know that id2
squares to itself and that sp . Transpose[sp] == {{1,0},{0,0}}
, we can substitute those in:
% /. { MatrixPower[id2, 2] -> id2, sp.Transpose[sp, {2, 1}] -> {{1, 0}, {0, 0}}}
(* KroneckerProduct[id2, id2, {{1, 0}, {0, 0}}]*)
So getting the answer is semi-automatic, which is typically necessary for mixed symbolic/explicit results. I hope this helps.