# 3.7 Rules Depending on More Than One Relation: The 2232 Case

The smallest nontrivial signature that can lead to growth (and therefore unbounded evolution) is 22 32. There are 4702 distinct left-connected rules with this signature. Here is a random sample of the behavior they generate, starting from a double self-loop {{0,0},{0,0}} and run for 8 steps:

rules = Import[ "https://www.wolframcloud.com/obj/wolframphysics/Data/\ RuleEnumerations/22-32c.wxf"]; SeedRandom; GraphicsGrid[ Partition[ ParallelMap[ ResourceFunction["WolframModel"][#, {{0, 0}, {0, 0}}, 8, "FinalStatePlot"] &, RandomSample[rules, 105]], 14], ImageSize -> Full]

Restricting to connected cases, there are 291 distinct outputs involving more than 10 relations after 8 steps:

rules = Import[ "https://www.wolframcloud.com/obj/wolframphysics/Data/\ RuleEnumerations/22-32c.wxf"]; GraphicsGrid[ Partition[ ResourceFunction["WolframModelPlot"][#] & /@ DeleteDuplicates[ Select[ParallelMap[ ResourceFunction["WolframModel"][#, {{0, 0}, {0, 0}}, 8, "FinalState"] &, rules], Length[#] > 10 && ResourceFunction["ConnectedHypergraphQ"][#] &]], UpTo], ImageSize -> Full]

The overall behavior we see here is very similar to what we saw with rules depending only on a single relation. But there is a new issue now to be addressed. With rules depending only on a single relation there is never any ambiguity about where the rule should be applied. But with rules that depend on more than one relation, there can be ambiguity, and the results one gets can potentially depend on the order in which updating is done.

Consider the rule

{{x, y}, {x, z}} -> {{x, w}, {y, w}, {z, w}}
RulePlot[ResourceFunction[ "WolframModel"][{{x, y}, {x, z}} -> {{x, w}, {y, w}, {z, w}}]]

With our standard updating order, the result of running this rule for 30 steps is:

ResourceFunction[ "WolframModel"][{{x, y}, {x, z}} -> {{x, w}, {y, w}, {z, w}}, {{0, 0}, {0, 0}}, 30, "FinalStatePlot"]

But with 6 different choices of random updating orders one gets instead:

SeedRandom; Table[ ResourceFunction[ "WolframModel"][{{x, y}, {x, z}} -> {{x, w}, {y, w}, {z, w}}, {{0, 0}, {0, 0}}, 30, "FinalStatePlot", "EventOrderingFunction" -> "Random"], 6]

None of these graphs are isomorphic, but all of them are qualitatively similar. Later on, we will discuss in detail the consequences of different updating orders, and their potentially important implications for physics. But for now, suffice it to say that at a qualitative level different updating orders typically lead to similar behavior.

As an example of something of an exception, consider the 22 32 rule shown in the array above:

{{x, y}, {y, z}} -> {{x, w}, {w, z}, {z, x}}
RulePlot[ResourceFunction[ "WolframModel"][{{x, y}, {y, z}} -> {{x, w}, {w, z}, {z, x}}]]

With our standard updating order, this rule behaves as follows, yielding complicated-looking results with about 1.5n relations after n steps:

ResourceFunction["WolframModelPlot"][#, ImageSize -> Tiny] & /@ ResourceFunction[ "WolframModel"][{{1, 2}, {2, 3}} -> {{1, 4}, {4, 3}, {3, 1}}, {{0, 0}, {0, 0}}, 16, "StatesList"]

But with random updating order, the behavior is typically quite different. Here are six examples of results obtained after 10 stepsand all of them are disconnected:

SeedRandom; Table[ Framed[ResourceFunction["WolframModelPlot"][#], FrameStyle -> LightGray, ImageSize -> Small] &@ ResourceFunction[ "WolframModel"][{{1, 2}, {2, 3}} -> {{1, 4}, {4, 3}, {3, 1}}, {{0, 0}, {0, 0}}, 10, "FinalState", "EventOrderingFunction" -> "Random"], 6]