User:LuveelVoom/A Primer On OCA
Introduction
!!! CURRENTLY A WIP !!! The uploaded (HTML) form of this doesn't function correctly, because the webpage has dynamic elements. For a fully working version, visit https://conwaylife.com/wiki/User:LuveelVoom/A_Primer_On_OCA
So you've messed around with Conway's Game of Life, but are struggling to find anything new? You want to make real discoveries? OCA (Other Cellular Automata) may be of interest for you. This guide aims to give you an introduction to OCA. It will include LifeViewer inserts, but you probably want either a Golly or LifeViewer window in the background to follow along. Exercises will be included at the end of some subchapters.
1: Other Cellular Automata
This chapter will cover the basics: what OCA are and how to recognize objects.
What's OCA?
An OCA is a cellular automata that does not follow the standard behavior of Life. Recall that in Life, a cell is born with 3 living neighbors and remains alive if it has 2 or 3 living neighbors:
In a different cellular automata, however, the rules are changed. Try, for example, running the same pattern, but this time in HighLife, where a cell is born with 3 or 6 living neighbors and lives with 2 or 3:
Note that the two patterns very quickly diverge from each other. In OCA, you can't just take patterns from Life for granted, especially in rules with very different behavior to Life. You'll have to find new patterns to achieve wanted behavior. Sometimes, patterns exist in rules that have no comparable counterpart in Life:
Even stranger, some rules lack entire object types that Life has. In Seeds, for example, a cell is born with 2 living neighbors and always dies in the next generation, making still lives impossible.
Object Recognition
If objects from standard Life don't work in OCA, how will you know what they do? Thankfully, there are a couple of tools to identify what an object is doing. The most powerful of these tools is your own brain. When you notice an object, you should be able to quickly recognize what it is. Here are common objects in a convenient table. You probably already know most of these, but a refresher is nice:
| Object type | Behavior | Example from Life |
|---|---|---|
| Still life | Does not change after a generation | Block |
| Oscillator | Returns to initial state after some number of generations | Blinker |
| Spaceship | Returns to initial state, plus displacement, after some number of generations | Glider |
| Active region | Common chaotic pattern, which can be used in catalyses | Herschel |
| Replicator | Creates a copy of itself, leading to infinite growth | No elementary examples in Life, but one is shown above |
| Puffer | Like a spaceship, but leaves objects behind it. (Called a rake if it leaves only spaceships, and a breeder if it leaves puffers) | Block-laying switch engine |
Once you spot an object, how do you figure out more specific details about it? Say, for example, you are confronted with this:
It would be tedious and time consuming to count each phase of this object until it returns to its original position, and even more tedious to record the population of each phase and find the lowest one. Thankfully, we have computers:
oscar: Your new best friend
This section is not entirely about oscar.lua (and oscar.py, although I won't be covering that because python is broken on my golly. They do pretty much the same thing), as LifeViewer deserves love too!! LifeViewer's Identify feature is more convenient to use, albeit slower. To use it, simply ensure that the target pattern is the only pattern on the grid (doing Shift+Delete will clear cells outside a selection) and it should give you details about the pattern! It also tells you information that oscar does not, like the period map. However, LifeViewer's Identify struggles with patterns with period in the tens of thousands or more. When these objects arise, you can use oscar.lua, a lua script helpfully bundled with Golly. To run oscar.lua, ensure that the target pattern is once again the only pattern in the grid, click "File -> Run Script", navigate to oscar.lua, and click it. It might take a while to run for high period patterns.
Sidebar: What the information under Identify means
The most important information worth noticing under Identify are the population and bounding box counts. The first row under the title of the object tells you three counts for cells. The smallest number is the minimum population of the object, the next number is the maximum population, and the last number is the average population. Typically, when deciding what phase of an object to use, what object is considered lower population, and whatever other population-based comparison needs to be done, the minimum population is the number used for making that decision.
The next row of information is the bounding box. The bounding box numbers indicate the largest phase of the object by bounding box size. The area of the bounding box is also provided. Bounding boxes are used for comparing gun sizes, along with a couple other metrics.
Another important value is the period of the object (how long it takes to repeat), and the mod of the object. If an object changes through some symmetry, then the object has a mod and a mod symmetry. For example, the LWSS has period 4, but it flips across the vertical axis every 2 phases, giving it mod 2.
There's also heat, which represents how many cells change in each generation. Once again, the number on the left is lowest heat, the second number is highest, and the third number is the average.
Limitations of oscar: recognizing replicators, puffers, and other strange growth
It is worth noting that oscar.lua and Identify both suffer from crucial flaws: they cannot identify puffers, replicators, or other complex patterns. One workaround to this is to use the catagolue object page ([1]), which can determine the period of puffers (however, it cannot currently identify their displacement; this has to be done manually). To identify using the object page, paste the RLE (obtainable in the lower right of LifeViewer after copying or directly from a Golly copy) into the text box and press identify. This will send you to a page which should contain the text "ylXX" at the top, where XX is the period of your puffer. The catagolue page can also identify other objects, indicating still lifes by xs(population), oscillators by xp(period), spaceships by xq(period), puffers and other linear growth with yl(period), and other objects with zz or rarely other descriptions. Catagolue will be useful later, so keep this in the back of your mind!
Exercises
Use oscar or Identify to identify each of the following: (F6 key will identify)
What's interesting?
So you've found an object. How do you tell if it's worth posting? It's usually fine to post it to the #naturalistic channel of the discord. However, when posting to the forums, here are some things to consider:
- Is your object high period or very large but common? For example, a period-250 object is more interesting than a period-5 object.
- Does your object interact with other objects in unique ways? For example, if your rule has a common ship that, when hitting a block, is cleanly reflected 90 degrees and leaves the block intact, that's pretty interesting.
- Does the rule itself have interesting dynamics and common objects with varied uses? Many of the most successful rules are ones with several different interesting object. If your rule has one object and it's not endemic, consider checking out rules nearby.
- Most importantly, use your judgement.
Outer Totalistic
Now you're ready to start exploring OCA. First, press Settings > Pattern > Change Rule in LifeViewer or Control > Set Rule in Golly. Then you can type in a rulestring. "What's a rulestring?" you're probably asking (or not). A rulestring is a string that determines the rules by which things change. For most of this guide, we'll be using rulestrings that fall under the B/S format. The B stands for birth. More concretely, a birth is when the center cell is empty and changes to a live cell in the next generation. All of these are births in Life:
The S stands for survival, which occurs when the center cell is alive and stays alive in the next generation. These are some survivals in Life:
Why are these groups of cells survivals and births and other groups not? It has to do with Life's rulestring, B3/S23. Note that the rulestring, when viewed with the explanation above in mind, corresponds to the basic rules of Life. This is how you can manipulate the rules of the universe. Changing the rulestring, to, for example, B36/S23, will give you HighLife. Some things to keep in mind:
- Adding B0 causes weird stuff to happen. Don't do it for now. It will be explained later in the guide. (Exercise for the reader: What's special about B0?)
- Adding B1 or B2 will invariably cause your rule to expand rapidly. The terminology for this is "exploding". We'll talk about this more under "Classifying OCA".
- Adding 6, 7, or 8 to either birth or survival usually doesn't have a huge impact.
Mess around for a bit and see what happens!
A mostly dry rulespace
You probably noticed something if you explored for a few minutes. Most rules, outside of Life and rules close to Life where only a few of the higher-numbered rules were changed, are really boring. As it turns out, the OT rulespace just... happens to not have much stuff in it. There are a few interesting rules, like Life and a couple we'll touch on below, but other than those you won't find much, not to mention that since there are only a few ten thousands of rules (sidenote!!! There are 32,768 rules that can be interesting, not counting B0. This is because any rule with B1 or B2 is unstoppably explosive, and any rule without B3 cannot escape the region it starts in (sidenote sidenote!!! This region is called the bounding box, being the smallest box that contains all cells of the pattern. Rules with B4 actually can escape this, but can't make it past the bounding diamond, which is the diamond where the midpoints of the edges are the corners of the bounding box. end sidenote) end sidenote). What's a "rulespace", though? A rulespace is a sort of cross-section of rules from all possible rules. For example, "Rules that resemble Life in dynamics and patterns" is the space between B3/S23 and B368/S238- you have Life in here, of course, but you can also add any of B68 and S8 and it will still resemble Life.
Islands of interesting behavior
(hi readers!!! can you provide me with pattern collections for Life (may be too large), sqrtreprule, Move, Day and Night, and Seeds? My computer has a weird problem with pasting and refuses to allow pasting between Lifeviewer or Golly and anywhere else. Your help is hugely appreciated!!)
life !!!!!!!!!!!!!!!!!!!
Life: the quintessential CA. Why is it so appealing? In short- it has stability and activity. There are stable structures and the rule doesn't grow infinitely, but small objects rapidly move and expand. In addition, it has the first known spaceship, the glider. The glider being so common is a major point in the rule's favor; it means that mechanisms based around manipulation of signals are made easier by having an easily-createable carrier of information that travels through the vacuum as fast as possible (in Life, "no spaceship can move at speed (m,n)c/x where (m+n)/x > 1/2", (and (1,1)c/4 is = 1/2), due to a theorem which will be explained later.) In addition, Life features a couple of high period oscillators (pentadecathlon for example) and has objects that move but are unstable (pi heptomino). All of these combine to make a rule with depth in most areas of CA exploration.
Isotropic Non-totalistic
Of course, given the above, you're probably wondering why one would explore other CA rules... at all. Well, thankfully, OT is NOT the only type of rule there is. Introducing Isotropic Non-Totalistic (INT) rules. Basically, INT does away with just summing the number of live neighbors and instead makes the configuration of live neighbors matter, up to rotation and reflection. Take a look at this picture:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
|---|---|---|---|---|---|---|---|---|---|
| — (no letter) |
|
| |||||||
| c (corner) |
|
|
|
|
|
|
|
||
| e (edge) |
|
|
|
|
|
|
|
||
| k (knight) |
|
|
|
|
|
||||
| a (adjacent) |
|
|
|
|
|
||||
| i |
|
|
|
|
|
||||
| n |
|
|
|
|
|
||||
| y |
|
|
|
||||||
| q |
|
|
|
||||||
| j |
|
|
|
||||||
| r |
|
|
|
||||||
| t |
|
||||||||
| w |
|
||||||||
| z |
|
What does it mean? Well, just like in OT, each of these can be toggled on and off for both birth and survival. However, instead of just summing the number of cells in a live state, the configuration of the cells also matters. However, note that there are only 51 configurations here. Why? Because even though the configuration matters, the rule is still symmetric. There are only 102 unique 3x3 binary grids under rotation and reflection, and the center cell represents birth or survival, so there are 51 transitions. Let's have an example:
Here is B2/S12. Due to having B2, this rule is explosive:
However, if we remove B2a (by negating it in the rulestring like this: B2-a/S12) we get a stable rule, Just Friends:
Hensel rulestrings (the way INT rules are typically represented) are slightly counterintuitive. They work like this:
- Choose which transitions will be in the rule.
- Place the letters next to each of the cell sum numbers corresponding to those transitions in birth and survival.
- Now comes the confusing part: to reduce the length of the rulestring (not that anyone can remember things like B2n3aijqr4ejqwz5cei6aen/S2aei3cejk4ceijkrw5cknry6-ae78 (just a random rule from the discord) anyway), if you have more than half the transitions in a cell sum number, (with the exception of needing 8 for cell sum 4), negate the transitions after the cell sum numbers. For example, if you have B2aeinc, the missing transition is B2k, so it would become B2-k. Lifeviewer does this automatically and I believe Golly does this too nowadays.
Exercises
1. Convert B3-eqij4n/S2-ac3i to a form without negation.
2. Convert B2enkc3acenqijk4inqe8/S23aeniqyr4etrnc to a form containing negation (watch out for unnecessary negation!)
3. Why do all rules with B1c expand at the speed of light?
4. Why do most rules with B1e or B2a expand at the speed of light?
5. If you remove B3a from Life, it can no longer escape its bounding diamond. Why?
How do you navigate a 102-dimensional hypercube?
Since there are 2^102 INT rules, how can you ever find a good rule? A commonly used technique is rulegolfing: flipping transitions until you arrive at a rule you find interesting. We will cover this in more detail later. To start, however, a good strategy is to find a rule that has properties similar to what you want, and go from there. For example,
5W (B3air4aceirw567/S2-a3-aejr4cknqy5ejky8) was golfed from
Bubbles IV (B3ai4-z5-n7e/S2-a3-e4n) which was golfed from
Bubbles I (B3ai45/S2-a34n) which was golfed from
B3ai4/S23. Notice how the rulestrings are similar but change by a few transitions after each one?
INT is unimaginably vast (also Exercises)
2^102 is a REALLY big number. Not many interesting things can be found in OT, but INT has absurd patterns- patterns have been found that do such things as:
-nearly emulate a loop rule ([2])
-count fibonacci numbers but then break down after an absurd time ([3])
-have a spaceship of any velocity ([4])
-spaceships that look as strange as one wishes ([5])
Scour the forums and you will find more unbelievable things like those. A great place to look is Miscellaneous Discoveries in Other Cellular Automata ([6]). This might be a bit of self promotion, but if my thread Your Best OCA Discoveries ever becomes popular there's probably good stuff there too ([7]).
Exercise:
Pick an OT rule you like. Change a few transitions and try to find something interesting.
What to look for in an interesting rule
Typically, the most important properties of an interesting rule are as follows:
| Property | Behavior in good rules | Does Life have it?? |
|---|---|---|
| Cosmology | Cosmology is the large-scale behavior of a rule. Typically, a rule interesting enough to warrant a forum thread should be non-explosive (most soups settle into a finite population not a lot higher than the initial population) but chaotic (there are active regions and soups expand outside of their bounding box | Yep! Run any soup and notice how active regions will spurt out of the soup but not expand forever. |
| Common spaceship(s) | Does the rule have a common spaceship or other similar signal? | Glider |
| High-period objects | Does the rule have fairly common high-period oscillators which can be used? | Life's not that great at this one, but the Pentadecathlon and some rarer oscillators work |
| Searchable | Can it be apgsearched? This overlaps with being non-explosive, but some non-explosive rules can't be apgsearched efficiently for various reasons | Yes. It can in fact be apgsearched, as we have noticed. |
| Unique behavior | Why is this rule interesting? Does it have something to distinguish it from rules a few transitions away? | Life gets in by the grandfather rule, and also the switch engine is (nearly) unique to it |
Like all good rules, these can be broken. There are rules that are very interesting and have deep forum threads, but violate several of the rules above. Use your intuition in deciding whether a rule is interesting.
Islands of really interesting behavior
2: Exploring OCA
Classifying OCA
Rulegolfing
When to rulegolf
When NOT to rulegolf
Transitions (deal with it, [removed]), and their trends
Object-XORing
Rulegolfing with COMPUTERS
3: Techniques for OCA
Corderization
Corderizing Basics
The puffer is oblique!!!
The puffer is dirty!!!!!!
When to give up
Gun construction
Leverage your oscillators
Overunity reactions
Now is a good time to talk about reflectors
Circuitry
Catalysis
Oscillators: certainly underused
Now is a better time to talk about reflectors
Other useful components
Turing-completeness
W110
Universal construction
Omniperiodicity and beyond
(maybe more advanced stuff here?)
4: Beyond Moore and the Binary
Larger than life
Rules with more than two states
Ruletables: your new archnemesis
Exotic cellular automata
Appendixes
I: Uncommon Nomenclature
II: Useful Programs
III: Useful Threads
IV: INT restriction sets
Index
luveel's lifeviewer configuration:


















































