Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Mathematica : Noncommutative Multiply and Replacement Rules

  1. Apr 4, 2014 #1


    User Avatar
    Gold Member

    Code (Text):

    Val[a_] := ToCharacterCode[ToString[a]][[1]];
    GH[a].GH[b].GH[c].GH[d].GH[b] //. {GH[a_].GH[b_] :> If[Val[a] > Val[b], GH[b].GH[a], GH[a].GH[b]]}
    I have the noncommutative multiply of GH[a].GH.GH[c].GH[d].GH

    My goal is to order these in increasing charcter value. (Val is the function to convert to basically ascii code).

    Shouldn't this work? And give GH[a].GH.GH.GH[c].GH[d] at the end?

    Notice also that
    Code (Text):


    GH[a].GH[b].GH[c].GH[d].GH[b] //. {
    (A_).GH[a_].GH[b_].(B_) :>
       A.If[Val[a] > Val[b], GH[b].GH[a], GH[a].GH[b]].B,
      (A_).GH[a_].GH[b_] :>
       A.If[Val[a] > Val[b], GH[b].GH[a], GH[a].GH[b]],
      GH[a_].GH[b_].(B_) :>
       If[Val[a] > Val[b], GH[b].GH[a], GH[a].GH[b]].B,
      GH[a_].GH[b_] :> If[Val[a] > Val[b], GH[b].GH[a], GH[a].GH[b]]}

    GH[a].GH[b].GH[c].GH[d].GH[b] //. {
      (A_).GH[a_].GH[b_] :> A.If[Val[a] > Val[b], GH[b].GH[a], GH[a].GH[b]]
    Even though the rule in the 2nd one exists in the replacements of the first, it doesn't apply. I think the problem comes in the fact that its applying a rule to the position right before the last two, and once that is evaluated, does not re-evaluate it, even though no real action was taken. Though I guess if you consider it replacing itself an action, then that's what it did.

    Any ideas? Even if its a different method. This is something that I'm trying to write in a much more complicated way, and I need to figure out how these work.

  2. jcsd
  3. Apr 4, 2014 #2
    Code (Text):
    In[1]:= Val[a_] := ToCharacterCode[ToString[a]][[1]];
    GH[a].GH[b].GH[c].GH[d].GH[b] //. Dot[h___, GH[a_], GH[b_], t___] /;

    Out[1]= GH[a].GH[b].GH[b].GH[c].GH[d]

    Code (Text):
    In[2]:= Sort[GH[a].GH[b].GH[c].GH[d].GH[b]]

    Out[2]= GH[a].GH[b].GH[b].GH[c].GH[d]
    Last edited: Apr 5, 2014
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook

Similar Threads for Mathematica Noncommutative Multiply
Mathematica Storing Mathematica output
Mathematica Mathematica to MATLAB
Mathematica Cannot do the integral of the Hyper-geometric function?
Mathematica Cannot Plot This Function in Mathematica
Mathematica While Loop in Mathematica