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

Tags:
  1. Apr 4, 2014 #1

    Hepth

    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]

    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.

    Thanks!
     
  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___] /;
       Val[a]>Val[b]:>Dot[h,GH[b],GH[a],t]

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

    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
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Mathematica : Noncommutative Multiply and Replacement Rules
Loading...