Transformation of rule ; does it give the same canonical rule?
Transformation of rule ; does it give the same canonical rule?
Simple case: transformation is independent on every edge
Simple case: transformation is independent on every edge
In[]:=
rr=RandomWolframModel[{{2,3}}{{4,3}}]
Out[]=
{{1,2,3},{1,3,4}}{{2,5,6},{5,1,7},{8,6,9},{10,11,7}}
E.g transformation that is the same for all edges
In[]:=
Map[RotateLeft,rr,{2}]
Out[]=
{{2,3,1},{3,4,1}}{{5,6,2},{1,7,5},{6,9,8},{11,7,10}}
In[]:=
FindCanonicalWolframModel[%]
Out[]=
{{1,2,3},{2,4,3}}{{5,6,1},{6,7,8},{3,9,5},{10,9,11}}
In[]:=
FindCanonicalWolframModel[%86]
Out[]=
{{1,2,3},{1,3,4}}{{2,5,6},{5,1,7},{8,6,9},{10,11,7}}
This is global, in the sense that it is done on the hypergraph of the whole universe
In[]:=
allrules=Import["/Users/sw/Dropbox/Physics/Data/RuleEnumerations/22-32c.wxf"];
In[]:=
Take[allrules,10]
Out[]=
In[]:=
Select[%,FindCanonicalWolframModel[Map[Reverse,#,{2}]]#&]
Out[]=
{{{1,1},{1,1}}{{1,1},{1,1},{1,1}},{{1,1},{1,1}}{{1,1},{1,2},{2,1}},{{1,1},{1,1}}{{1,1},{1,2},{3,1}}}
In[]:=
revsym=Pick[allrules,ParallelMapMonitored[(FindCanonicalWolframModel[Map[Reverse,#,{2}]]===#)&,allrules]];
In[]:=
Length[revsym]
Out[]=
92
In[]:=
Length[allrules]
Out[]=
4702
In[]:=
Last[revsym]
Out[]=
{{1,2},{2,3}}{{4,5},{4,3},{1,5}}
In[]:=
RulePlot[WolframModel[%]]
Out[]=
In[]:=
RulePlot[WolframModel[#]]&/@RandomSample[revsym,10]
Out[]=
In[]:=
InteractiveListSelectorSW[ParallelMapMonitored[FinalPicture2[#,5]#&,revsym]]
Out[]=
Evolution in the causal invariant causal graph must exhibit the symmetry (cf P invariance)
Evolution in the causal invariant causal graph must exhibit the symmetry (cf P invariance)
Test for all permutations
Test for all permutations
More complex case: transformation mixes edges
More complex case: transformation mixes edges
Local Symmetry
Local Symmetry
Instead of doing a global edge transformation, do Reverse on some edges but not others
Do a different permutations on different subhypergraphs
Local case: do an arbitrary permutation of elements across the hypergraph
Local case: do an arbitrary permutation of elements across the hypergraph
If we were permuting labels, this would always stay as an isomorphic hypergraph
But actually we are permuting all positions
1. Do the evolution using the original rule and the original hypergraph
1. Do the evolution using the original rule and the original hypergraph
2. Define a transformation of slots in the evolution
2. Define a transformation of slots in the evolution
All edges that were ever created (no duplicates)
3. Apply the transformation to AllExpressions
3. Apply the transformation to AllExpressions
4. We can recover the new evolution ;
4. We can recover the new evolution ;
This is transformation made at every update.. (as an index into AllExpressions)
What ultimately is: can we get the same multiway evolution?
What ultimately is: can we get the same multiway evolution?
Do we get the same multiway evolution by doing slot transformations in all expressions on every branch of the multiway system?
Do we get the same multiway evolution by doing slot transformations in all expressions on every branch of the multiway system?
What is MultibranchAllExpressions ?
What is MultibranchAllExpressions ?
Every edge involved in every event in the multiway system
Also need MultiwayAllEventsList
Define a transformation on that list.....
Define a transformation on that list.....
When is the result also a valid evolution?
[ Transformed events are allowed by the rule, and no new events are allowed by the rule ]
[ Transformed events are allowed by the rule, and no new events are allowed by the rule ]