WOLFRAM NOTEBOOK

In[]:=
HypergraphAutomorphismGroup[{{x,y},{x,z}}]
Out[]=
PermutationGroup[{Cycles[{{2,3}}]}]
FroAll[rule,transform[multirule[states]]===multirule[transform[states]]]
Various kinds of transformations:
- pure node permutation
- more complex edge swapping

Analogy:

For strings, we can ask if a rule commutes with Reverse or with AB
In[]:=
MultiwaySystem[{"BA""AB"},StringTuples["AB",5],4,"StatesGraph"]
Out[]=
In[]:=
MultiwaySystem[{"BA""AB","AB""BA"},StringTuples["AB",4],4,"StatesGraph"]
Out[]=
Symmetry implies conservation law:
If rule is symmetric under exchange of A,B, then it preserves numbers of As and Bs
In[]:=
MultiwaySystem[{"AAA""ABA"},StringTuples["AB",4],5,"StatesGraph"]
Out[]=
Reversal symmetry doesn’t work, because of embedding inside string
In[]:=
StringTuples["AB",3]
Out[]=
{AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB}
Like C, P :)
In[]:=
MultiwaySystem["BA""AB",StringTuples["AB",3],1]
Out[]=
{{AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB},{AAB,ABA,ABB,BAB}}
In[]:=
MultiwaySystem["BA""AB",StringTuples["AB",4],1]
Out[]=
{{AAAA,AAAB,AABA,AABB,ABAA,ABAB,ABBA,ABBB,BAAA,BAAB,BABA,BABB,BBAA,BBAB,BBBA,BBBB},{AAAB,AABA,AABB,ABAA,ABAB,ABBA,ABBB,BAAB,BABA,BABB,BBAB}}
In[]:=
MultiwaySystem[{"BA""AB","AB""BA"},StringTuples["AB",3],1]
Out[]=
{{AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB},{AAB,ABA,ABB,BAA,BAB,BBA}}
In[]:=
MultiwaySystem["BA""AB",StringTuples["AB",4],1,"StatesGraph"]
Out[]=
Has an additional symmetry of preserving # of As and Bs
In[]:=
MultiwaySystem["AAA""ABA",StringTuples["AB",5],3,"StatesGraph"]
Out[]=
In[]:=
MultiwaySystem["AAA""ABA",StringTuples["AB",5],1]//Last
Out[]=
{AAABA,AABAA,AABAB,ABAAA,ABAAB,ABABA,ABABB,BAABA,BABAA,BABAB,BBABA}

Symmetry transformation commutes with rule:

In[]:=
MultiwaySystem["AAA""ABA",StringReverse/@StringTuples["AB",5],1]//Last
Out[]=
{AAABA,AABAA,AABAB,ABAAA,ABAAB,ABABA,ABABB,BAABA,BABAA,BABAB,BBABA}
In[]:=
Sort@(StringReverse/@(MultiwaySystem["AAA""ABA",StringTuples["AB",5],1]//Last))
Out[]=
{AAABA,AABAA,AABAB,ABAAA,ABAAB,ABABA,ABABB,BAABA,BABAA,BABAB,BBABA}

Graph example

HypergraphAutomorphismGroup[{{x,y},{x,z}}]
In[]:=
Graph[MultiwaySystem[WolframModel[{{1,2,3}}{{2,3,1}}],List/@Permutations[Range[3]],1,"StatesGraph"],VertexSize3]
Out[]=
This still only gives one canonical output:
[[ incorrect one-way edges... ]]
When you are looking at the multistate, you care about the relative indices in the multistate
Two cases:
global multiway : canonicalize the whole hypergraph
local multiway system: there are internally many ways to do matches, even when the indices on the original hypergraph are external [equivalent to canonicalize only newly created vertices]

Canonicalization Approaches

Global case, generating a new variable for everything, and considering them distinct:
Local case:
2nd step:
RESULT WITHOUT USING Hash:

Format

If start purely from a self loop, everything that comes out is a pure tree.....

Inner variants:

In general, could imagine trees trees

Wolfram Cloud

You are using a browser not supported by the Wolfram Cloud

Supported browsers include recent versions of Chrome, Edge, Firefox and Safari.


I understand and wish to continue anyway »

You are using a browser not supported by the Wolfram Cloud. Supported browsers include recent versions of Chrome, Edge, Firefox and Safari.