Consider multiway systems where multiple states merge to make a single state....
Consider multiway systems where multiple states merge to make a single state....
E.g. concatenation multiway string system
At every step, take pairs of strings together [cf 2-argument function]
Compare to Wolfram Models....
Compare to Wolfram Models....
Basically this is a local multiway system....
Implementation in string case
Implementation in string case
In[]:=
MMWEvolveList[rule_,init_,t_]:=NestList[MMWStep[rule,#]&,{{init},{}},t]
In[]:=
MMWStep[rule_,{state_,edges_}]:={Union[Last/@#],Union[#]}&[Flatten[Function[s,Thread[#StringReplaceList[StringJoin[s],rule]]&/@s]/@Tuples[state,2]]]
In[]:=
Thread[#->StringReplaceList[StringJoin[{"AB","BA"}],{"A""AB","BB""A"}]]&/@{"AB","BA"}
Out[]=
{{ABABBBA,ABAAA,ABABBAB},{BAABBBA,BAAAA,BAABBAB}}
In[]:=
MMWEvolveList[{"A""AB","BB""A"},"A",2]
Out[]=
{{{A},{}},{{AAB,ABA},{AAAB,AABA}},{{AABAABB,AABABAB,AABABBA,AABBAAB,AABBABA,ABAAABB,ABAABAB,ABAABBA,ABABAAB,ABABABA,ABBAAAB,ABBAABA},{AABAABAABB,AABAABABAB,AABAABABBA,AABAABBAAB,AABAABBABA,AABABAAABB,AABABAABAB,AABABABAAB,AABABABABA,AABABBAAAB,ABAAABABAB,ABAAABABBA,ABAAABBABA,ABAABAAABB,ABAABAABAB,ABAABAABBA,ABAABABAAB,ABAABABABA,ABAABBAAAB,ABAABBAABA}}}
In[]:=
Graph[Flatten[Last/@MMWEvolveList[{"A""AB","BB""A"},"A",2]]]
Out[]=
In[]:=
Graph[Flatten[Last/@MMWEvolveList[{"A""AB","BA""A"},"A",2]]]
Out[]=
In[]:=
Graph[Flatten[Last/@MMWEvolveList[{"A""AA","AA""A"},"A",3]]]
Out[]=
In[]:=
Graph[Flatten[Last/@MMWEvolveList[{"A""AA","AA""A"},"A",3]],VertexLabelsAutomatic]
Out[]=
In[]:=
Graph[Flatten[Last/@MMWEvolveList[{"A""AA","AA""A"},"A",3]],VertexLabels(x_:>StringLength[x])]
Out[]=
In[]:=
Graph[Flatten[Last/@MMWEvolveList[{"A""AA","AA""A"},"A",4]]]
Out[]=