Function Repository Resource:

FindUnresolvedCriticalPairs

Source Notebook

Find all unresolved (non-convergent) critical pairs for a given multiway system evolution

Contributed by: Jonathan Gorard

ResourceFunction["FindUnresolvedCriticalPairs"][rules,init,n]

finds all unresolved critical pairs after n steps in the evolution of the multiway system with the specified rules starting from initial condition init.

Details and Options

Critical pairs are pairs of terms in a rewrite system that result from overlapping rules.
In the context of multiway systems, critical pairs indicate bifurcations or ambiguities in the multiway system evolution.
ResourceFunction["FindUnresolvedCriticalPairs"] gives all critical pairs in the multiway system that do not eventually converge back to a common state.
Multiway systems operate on strings, lists and WolframModel systems.
When rules are specified by an explicit association, the following elements can be included:
"StateEvolutionFunction"the list of successors for a given state
"StateEquivalenceFunction"whether two states should be considered equivalent
"StateEventFunction"the list of events obtained from a given state
"SystemType"system type name
"EventSelectionFunction"which events from a given state should be included
The initial condition can consist of a single state or a list of states.

Examples

Basic Examples (5) 

Find all unresolved critical pairs for a non-causally-invariant multiway system evolution:

In[1]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{"A" -> "AB", "AA" -> "BA"}, {"AAB"},
  3]
Out[1]=
In[2]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{{0} -> {0, 1}, {0, 0} -> {1, 0}}, {{0, 0, 1}}, 3]
Out[2]=

Find all unresolved critical pairs for a more complicated non-causally-invariant multiway system evolution:

In[3]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{"AA" -> "AAB", "AAA" -> "BAAB"}, {"AAA"}, 3]
Out[3]=
In[4]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{{0, 0} -> {0, 0, 1}, {0, 0, 0} -> {1,
     0, 0, 1}}, {{0, 0, 0}}, 3]
Out[4]=

By picking a specific updating order, we can force all critical pairs to converge:

In[5]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{"AA" -> "AAB", "AAA" -> "BAAB"} -> ({First[#]} &), {"AAA"}, 3]
Out[5]=
In[6]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{{0, 0} -> {0, 0, 1}, {0, 0, 0} -> {1,
      0, 0, 1}} -> ({First[#]} &), {{0, 0, 0}}, 3]
Out[6]=

Determine that a multiway system is causally invariant:

In[7]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{"A" -> "AA", "B" -> "AB"}, {"ABA"},
  3]
Out[7]=
In[8]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{{0} -> {0, 0}, {1} -> {0, 1}}, {{0, 1, 0}}, 3]
Out[8]=

FindUnresolvedCriticalPairs can also find unresolved critical pairs in WolframModel evolutions:

In[9]:=
ResourceFunction["FindUnresolvedCriticalPairs"][
 "WolframModel" -> {{{1, 2}, {1, 3}, {1, 4}} -> {{1, 2}, {1, 3}, {1, 4}, {2, 3}}}, {{{1, 2}, {1, 3}, {1, 4}}}, 5]
Out[9]=
In[10]:=
ResourceFunction["FindUnresolvedCriticalPairs"][
 "WolframModel" -> {{{2, 2, 1}, {2, 2, 2}} -> {{1, 1, 3}, {1, 1, 1}, {2, 1, 2}, {3, 3, 2}}}, {{{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}},
  1]
Out[10]=

Scope (1) 

FindUnresolvedCriticalPairs gives an empty list if and only if the multiway system is causally invariant:

In[11]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{"A" -> "AB", "B" -> "A"}, {"A"}, 3]
Out[11]=
In[12]:=
ResourceFunction[
 "FindUnresolvedCriticalPairs"][{{0} -> {0, 1}, {1} -> {0}}, {{0}}, 3]
Out[12]=

Publisher

Jonathan Gorard

Version History

  • 1.0.0 – 04 December 2019

Related Resources

License Information