On Nov. 28, Robert Dodier wrote:
-----------------
> I don't see a problem w/ tellsimpafter here ...
>> tellsimpafter (comm (sig2,sig1), -2*%i*sig2)$
> This result should be -2*%i*sig3, right?
> After changing that rule, I get
> pauli_simp (comm (sig2^^3, sig1^^5))
> => - 2 %i sig3
---------------------------
You are right. I had the wrong replacement in that
line, and tellsimpafter passes the test with
pauli0.mac:
--------------------------------------------
/* file pauli0.mac uses
tellsimpafter after
defrule expansion */
load (commutators)$
remove (comm, antisymmetric)$
declare ([s1, s2, s3, s4], scalar)$
declare ([sig1,sig2,sig3],nonscalar)$
tellsimpafter (comm (sig1,sig2), 2*%i*sig3)$
tellsimpafter (comm (sig2,sig1), -2*%i*sig3)$
tellsimpafter (comm (sig2,sig3), 2*%i*sig1)$
tellsimpafter (comm (sig3,sig2), -2*%i*sig1)$
tellsimpafter (comm (sig3,sig1), 2*%i*sig2)$
tellsimpafter (comm (sig1,sig3), -2*%i*sig2)$
tellsimpafter (sig1 . sig1, 1)$
tellsimpafter (sig2 . sig2, 1)$
tellsimpafter (sig3 . sig3, 1)$
tellsimpafter (sig1 . sig2, %i*sig3)$
tellsimpafter (sig2 . sig1, -%i*sig3)$
tellsimpafter (sig2 . sig3, %i*sig1)$
tellsimpafter (sig3 . sig2, -%i*sig1)$
tellsimpafter (sig3 . sig1, %i*sig2)$
tellsimpafter (sig1 . sig3, -%i*sig2)$
pauli_simp (e) := (comm_simp (e), ev(%%, infeval))$
/*
(%i1) load(pauli0);
(%o1) "c:/work5/pauli0.mac"
(%i2) pauli_simp ( comm (sig2^^3,sig3^^5));
(%o2) 2*%i*sig1
(%i3) pauli_simp ( comm (sig3^^3,sig1^^5));
(%o3) 2*%i*sig2
(%i4) pauli_simp ( comm (sig1^^3,sig2^^5));
(%o4) 2*%i*sig3
(%i5) pauli_simp ( comm (sig3^^3,sig2^^5));
(%o5) -2*%i*sig1
(%i6) pauli_simp ( comm (sig1^^3,sig3^^5));
(%o6) -2*%i*sig2
(%i7) pauli_simp ( comm (sig2^^3,sig1^^5));
(%o7) -2*%i*sig3
*/
-------------------------------
So now I have two working methods, which I would
like to extend to other commonly used (in physics)
matrices.
Thanks for the feedback,
Ted