LmCast :: Stay tuned in

All 23-Bit Still Lifes Are Glider Constructible

Recorded: Jan. 16, 2026, 10:03 a.m.

Original Summarized

All 23-Bit Still Lifes Are Glider Constructible

Home
All 23-Bit Still Lifes Are Glider Constructible
December 27, 2025 / gol

In the Game of Life, which still lifes can be produced by crashing
gliders together? We’ve known for a few years that the answer cannot
be “all of them”, because in 2022 Ilkka Törmä and Ville Salo found a
patch of still life that, if it exists in the universe, must have
existed since the beginning of time. And so, there is no way we could
have produced it out of empty space through glider collisions. Similar
such patches have been found since, with the goal of optimising size
or population, and at the time of writing the record holder is an
unsynthesizable still life with population 154 produced by forum user
“400spartans”.
Finding syntheses for small still lifes is easy, but at some unknown
point below 154 it becomes impossible. Today, we completed our
collaborative project to notch the lower bound up from 22 to 23, by
giving explicit syntheses for all 1,646,147 (strict)A still life is
strict when all its islands are necessary to maintain the stability of
the pattern.

still lifes with population 23.
The final holdout shown below has systematic name
xs23_g88m9icz1iu146, and was solved by vilc.

x = 10, y = 7, rule = B3/S23
6b2o$2b2obo2bo$2bo3bo2bo$4b2ob2o$4o2bo$o2bo2bo$4b2o!

[[ ZOOM 14 ]]
#C Colours are set in src/LifeViewer.hs
#C [[ NOGUI ]]
#C [[ COLOR BACKGROUND #f8f8f8 ]]
#C [[ COLOR ALIVE #000000 ]]
#C [[ COLOR ALIVERAMP #000000 ]]
#C [[ COLOR DEADRAMP #dfebf6 ]]
#C [[ COLOR GRID #f0f0f0 ]]
#C [[ GRID ]]
#C [[ GRIDMAJOR 0 ]]
#C [[ COLOR DEAD #dfebf6 ]]

As you might imagine, this is not the first project of this kind; all
still lifes with 18 bits were synthesised in October 2019, 19 bits in
February 2020, 20 bits in March 2021, 21 bits in November 2022 and 22
bits in August 2024.
As the number of bits increases, the number of distinct still lifes
explodes exponentially, so that the 23-bit project had about 2.4× as
many still lifes to consider as the 22-bit project. The situation is
actually worse than that: not only are there more problems to get
through, but each additional bit reveals knotty new ways for a still
life to fit together.
My contribution was the mass generation of synthesis recipes through
computer searches. These disposed of roughly 99.97% of the targets,
letting the people with actual synthesis talent focus on the ones
where new ideas were needed. I’ll spend the rest of the post talking
about the things I tried.
Here’s the solution for that final still life, split into steps:

x = 115, y = 66, rule = B3/S23
9bo54bo34bo$7b2o54bo28bo4b2o$8b2o8bo44b3o25bo6b2o$3bo15bo71b3o$2bo14b
3o$2b3o82b3o$42b2o28b2o15bo12b2o$41bo2bo26bo2bo13bo12bo2bo$2bo39bo2bo
26bo2bo26bo2bo$obo36b3ob2o24b3ob2o24b3ob2o$b2o36bo2bo26bo2bo26bo2bo$
40bobo29bo7bo21bo$41bo6bo24b2o3b2o23b2o$48bobo23bo4b2o23bo$48b2o23bo
29bo$43b3o28b3o13bo12b2o$8bo36bo30bo13b2o$7b2o35bo44bobo$7bobo62b2o$
71bobo3b3o$24b3o12b3o31bo3bo$26bo12bo38bo$25bo14bo2$19b2o53b3o$19bobo
54bo$19bo42bo12bo$61b2o$61bobo3$58b3o$58bo$59bo3$42bo$18b2o7b3o12bobo$
19b2o8bo12b2o$18bo9bo29bo$59b2o$7bo20bo29b2o$8bo20bo$6b3o18b3o3$7bo4b
2o23b2o3b2o28b2o28b2o$6bobo2bo2bo21bo2bobo2bo23b2obo2bo23b2obo2bo$7b2o
3bo2bo21b2o3bo2bo22bo3bo2bo22bo3bo2bo$b3o5b3ob2o24b3ob2o24b3ob2o25b2ob
2o4bobo$3bo5bo2bo26bo2bo24bobo2bo23b4o2bo6b2o$2bo9bo29bo24b2o3bo23bo2b
o2bo7bo$13b2o28b2o12bo15b2o28b2o$14bo9b3o17bo12b2o15bo29bo7b3o$13bo12b
o16bo12bobo2bobo9bo29bo8bo$13b2o10bo17b2o17b2o9b2o28b2o8bo$62bo$33bo
62b3o$33b2o3bo59bo$32bobo2b2o28b2o28bo$37bobo21bobo3bobo$62b2o3bo32b2o
$43bo18bo37bobo$31b3o8b2o50b3o3bo$33bo8bobo51bo$32bo62bo!

#C [[ AUTOSTART ]]
#C [[ HEIGHT 300 ]]
#C [[ ZOOM 4 ]]
#C [[ GPS 20 ]]
#C [[ GRID LOOP 100 ]]
#C Colours are set in src/LifeViewer.hs
#C [[ NOGUI ]]
#C [[ COLOR BACKGROUND #f8f8f8 ]]
#C [[ COLOR ALIVE #000000 ]]
#C [[ COLOR ALIVERAMP #000000 ]]
#C [[ COLOR DEADRAMP #dfebf6 ]]
#C [[ COLOR GRID #f0f0f0 ]]
#C [[ GRID ]]
#C [[ GRIDMAJOR 0 ]]
#C [[ COLOR DEAD #dfebf6 ]]

Solutions like this are typical: there is a natural reaction that
produces a large chunk of still life, and then many “synthesis
components” massage that into the target.There is an unfortunate
clash of terminology between this kind of “component” and a connected
component of a pattern.

Many of these first steps are discovered via soup searches. Sometimes,
a random soup will produce a still life of interest through the random
collision of some simple reagents. If we are lucky, it is possible to
reproduce the reaction by using gliders to re-create the same
configuration of reagents. We can also find first steps by randomly
colliding gliders directly; this was the topic of a previous
post.
Most of the action happens after this first step, in finding sequences
of components that massage a known still life into the target.
Transfer and Stomp
As you can see in the above example, most synthesis steps only touch a
small part of the still life. And because pattern behaviour in the
Game of Life is determined locally, the incoming gliders in a
synthesis step don’t particularly care what the rest of a still life
looks like, only that the part they interact with is correct.

x = 47, y = 19, rule = B3/S23
11bo$10bo30bo$4bobo3b3o27bo$4b2o28bobo3b3o$bo3bo28b2o$b2o28bo3bo$obo
12b2o14b2o12b2o$14bo2bo12bobo11bobo$15bo2bo25bo$12b3ob2o27bo$12bo2bo
26b3o$15bo26bo$16b2o$17bo$16bo$3b2o11b2o$2bobo28b2o$4bo27bobo$34bo!

#C [[ AUTOSTART ]]
#C [[ ZOOM 6 ]]
#C [[ GPS 20 ]]
#C [[ GRID LOOP 60 ]]
#C Colours are set in src/LifeViewer.hs
#C [[ NOGUI ]]
#C [[ COLOR BACKGROUND #f8f8f8 ]]
#C [[ COLOR ALIVE #000000 ]]
#C [[ COLOR ALIVERAMP #000000 ]]
#C [[ COLOR DEADRAMP #dfebf6 ]]
#C [[ COLOR GRID #f0f0f0 ]]
#C [[ GRID ]]
#C [[ GRIDMAJOR 0 ]]
#C [[ COLOR DEAD #dfebf6 ]]

For this reason, there is hope of “transferring” synthesis steps from
one still life to another. There is a transfer.py script in
Shinjuku that does exactly this: from each component, one can
extract a “component template” which only remembers the placements of
the gliders and the part of the still life which is affected. Then,
for each component template and each target, the script tests whether
the output of the template matches any location on the target, and for
anywhere that matches, whether the component actually effects that
change successfully. This script, together with some extensions by
Alex Greason, were important in all the synthesis projects up to the
current one.
Unfortunately, transfer.py is a little slow, and a little limited.
Independently, vilc and myself worked on some C++ replacements:
transfer.cpp and Stomp respectively.The transfer.py script
spends a lot of its time in the underlying C++ lifelib library, so
the change of language doesn’t have as much of an impact as you might
think.

Stomp is what I used to do the initial mass solving of the
still lifes that only required one step to be transferred from a known
component, as well as to find the long recipes that were necessary for
some of the trickier still lifes.
Stomp does a few things that make it a lot faster; the first is that
it is multithreaded. This is easy enough: processing each target is an
embarrassingly parallel problem. Next, it uses a more refined notion
of “template” that also takes into account neighbourhood counts for
cells that don’t change. This cuts down on the number of false
positive matches a lot. The templates are also not simply applied one
at a time, instead, Stomp builds a tree of templates, where each node
branches on the state of an additional cell in the template (up to
some fairly shallow depth).This was apparently the intended strategy
to be used in the transfer.py script; one of the crucial functions
is called apply_tree but doesn’t actually use a tree.

This allows
us to throw out a lot of the templates without checking individually
whether they match, once we reach a branch in the tree that no longer
matches any location in the target pattern.
On top of all the above, Stomp is quite discerning about which
component templates it’s willing to consider. I tried a lot of
heuristics while working on Stomp, and here are the ones I landed on
by the end. We ignore components in any of the following situations:

Pure cleanup steps, where the thing being deleted is unattached to
the remainder of the still life. Because we are doing a backwards
search for components that lead to a target, allowing cleanup steps
would lead to an explosion of precursors with, say, an extra block
in all possible positions. (transfer.py does the same.)
All the input still lifes are small (<7 in population). These are
likely first steps derived from soups as discussed above, and not
generalisable.
Less than 30% of the original still life survives unchanged; to
avoid junk “components” that essentially blow up a still life and
replace it with a new one.
There are multiple disconnected changes to the still life. These
often arise when performing symmetric changes to a symmetric base,
and we may as well apply both steps separately.
The component involves an unnecessary
boat-bit reaction. There are
a lot of these, and we may as well do that as a separate step.

With all the above, we still run into trouble with the search space exploding. The biggest problem is components that create a small still life, together with additional components that just shove it around pointlessly. For this reason, we further cut down on the new synthesis components we’re willing to consider while the search is running. We skip any new component where:

The input or output is too sparse. For these purposes, “sparse”
means that there is some connected component that is too far away
from the largest component by population.
The gliders interact with the largest connected component but not
any smaller ones (if there are any).

This is all glued into a tree search, prioritising precursors with
lowest population. At the end of this post, you can see a solution
that required a very deep tree search to find, and which would
certainly not have been possible without these improvements.
Using the existing components extracted from the Shinjuku database got
us a lot of the way, with only around 2000 23-bit targets resisting
solution at this point.
So, how do we find new components to feed into this machine?
Component Farming
The simplest strategy is to fire some gliders at an object and hope
that it modifies it without destroying it. I did this using a
modification of the GPU searcher from the previous
post, to iterate through a list of
objects and all possible 3-glider collisions that interact within a
certain time range. If the still life is still mostly present but not
exactly identical to the starting object, the configuration is logged.
Sometimes some extra ash is left behind, so an additional script hunts
for a minimal cleanup.
This kind of random searching surfaces components that couldn’t be
found any other way, because they’re too weird and unexpected to have
been dreamed up by a human. Here’s a few random examples, three of which have automatically-generated cleanup gliders:

x = 93, y = 29, rule = B3/S23
41bobo$41b2o$42bo2$10bo81bo$11bo78b2o$9b3o14bo64b2o$27bo54bo$o24b3o53b
o$b2o78b3o2b2o$2o32bo18b2o17b2ob2o9bobo$11b2o4b2o9b2o3bobobob2o13bo18b
obobo8bo$10bo2bo2bo2bo7bobo4b2ob2obo13bob2o15bobo2bo$6b2o3b2o2bo2b2o9b
o6bo18bo2bo4bo10bo2b2o$5bobo5b2o21bo19b2o4bo12b2o$7bo5bo20b2o26b3o11bo
$14bo18bo20b4o17bo$15bo18bobo16bo4bo15bo$14b2o19b2o16b2o2b2o15b2o$80b
3o$60b3o17bo$9b3o48bo20bo$9bo51bo$10bo44b3o$57bo$56bo$64b3o$64bo$65bo!

#C [[ AUTOSTART ]]
#C [[ GPS 10 ]]
#C [[ GRID LOOP 60 ]]
#C Colours are set in src/LifeViewer.hs
#C [[ NOGUI ]]
#C [[ COLOR BACKGROUND #f8f8f8 ]]
#C [[ COLOR ALIVE #000000 ]]
#C [[ COLOR ALIVERAMP #000000 ]]
#C [[ COLOR DEADRAMP #dfebf6 ]]
#C [[ COLOR GRID #f0f0f0 ]]
#C [[ GRID ]]
#C [[ GRIDMAJOR 0 ]]
#C [[ COLOR DEAD #dfebf6 ]]

With a little more work and a more restricted search area, going
through 4-glider collisions is manageable, though I ended up getting
fewer interesting results than the 3-glider set. One additional
strategy was to place entire spark-producing configurations of gliders
rather than individual gliders. For this, I stole a large set of such
configurations from this forum thread. Again, this turned up some
interesting results, but not as many as I had hoped.
Mr. Component
Kazyan had the following idea on Discord way back in 2021:

Take a look at the final step for xs26_08o0u1eoz32q9871. It
consists of two very distinct halves. Those two subcomponents, at
the time, were known, but since transfer.py had never seen them be
used together, it wouldn’t have known to use them if asked to take
apart that xs26. This vaporware, which I’ve been thinking of as “Mr.
Component”, would be supplied with a list of these halves, assemble
as many complete pairings from that list as possible, and dump the
resulting full components into shinjuku. Then, transfer.py would
do its thing.

For reference, here’s that last step that he’s referring to:

x = 23, y = 22, rule = LifeHistory
13.A.A$13.2A5.A$14.A4.A$19.3A$12.A$10.A.A$11.2A4$18.2A$3.A.A11.A.A$4.
2A11.A.A.2A$4.A10.D2.A2.A$15.3A3.A$15.A2.3A$16.A.A$17.A$.A$.2A4.3A$A.
A6.A$8.A!

#C [[ AUTOSTART ]]
#C [[ GPS 10 ]]
#C [[ GRID LOOP 50 ]]
#C Colours are set in src/LifeViewer.hs
#C [[ NOGUI ]]
#C [[ COLOR BACKGROUND #f8f8f8 ]]
#C [[ COLOR ALIVE #000000 ]]
#C [[ COLOR ALIVERAMP #000000 ]]
#C [[ COLOR DEADRAMP #dfebf6 ]]
#C [[ COLOR GRID #f0f0f0 ]]
#C [[ GRID ]]
#C [[ GRIDMAJOR 0 ]]
#C [[ COLOR HISTORY #dfebf6 ]]
#C [[ COLOR MARK1 #803300 ]]
#C [[ COLOR MARKOFF #e0ae8f ]]

I’ve highlighted the crucial cell in red. This cell is never active,
but is the single spot where the two halves of the component interact.
In a single generation this cell goes from underpopulated to
overpopulated, and to achieve this the two halves have to be correctly
synchronised. Applying them to the starting still life in sequence
would not work.
I wrote(For “wrote” read “vibecoded”, this worked disturbingly
well.)

a small tool to realise Kazyan’s idea. This first goes through
all known components and identifies the above situation; when there
are two barely-interacting pieces that rely on each other to succeed.
Each piece stores the “timing” it requires, that is, on which
generation the above sort of neighbourhood change occurs.
Then, like Stomp above, we run through some list of targets and try to
apply all of these discovered parts to it. Each pair of matching parts
is tested to see whether they actually succeed simultaneously, once
their timing is aligned.
Of course this is not fully general; in principle a component may have
more than two pieces that require synchronisation at multiple
generations. If you have any examples let me know! The two-part
version of the tool worked well enough.
Overall Mr. Component worked well, and resulted in a bunch of
automated solutions that I think would have had to be found by hand
otherwise. Here’s a couple of example steps, with the crucial cells
highlighted. Notice that the cell in the rightmost example actually
goes from overpopulated to underpopulated, giving that tricky bridge
motif in the middle.

x = 116, y = 40, rule = LifeHistory
101.A$99.2A$100.2A$89.A$90.A$88.3A2$72.A.A$72.2A$4.A68.A27.A$2.A.A35.
2A58.A.A$3.2A10.A2.2A20.A19.2A.A35.A.A$14.A.A2.A18.2A2.A17.A.4A5.2A
26.A$A12.A2.A.A18.A2.2A.A22.A3.2A17.A.A8.A$.2A11.3A2.3A14.A2.A2.A4.A.
A11.2A2.A.A4.A10.A6.2A7.2A3.2A7.A.A$2A12.D2.2A2.A14.2A.A.A5.2A12.A2.A
D2A13.A.A6.A9.D2A2.A7.2A$16.A2.A18.A.AD6.A13.A.AD16.2A17.A.2A9.A$16.A
.A19.A19.A4.2A$17.A21.A19.A27.3A$38.2A6.2A9.3A29.A$45.2A41.A$47.A15.
3A$34.A28.A$2.2A30.2A4.2A22.A$.A.A29.A.A4.A.A58.2A$3.A36.A59.2A8.2A$
13.2A81.2A4.A7.A.A$12.A.A80.A.A12.A$14.A17.2A42.3A18.A$31.A.A44.A$17.
2A14.A43.A$17.A.A$17.A81.3A$99.A$15.A84.A$15.2A$14.A.A$86.2A$85.A.A$
87.A!

#C [[ AUTOSTART ]]
#C [[ GPS 10 ]]
#C [[ GRID LOOP 50 ]]
#C Colours are set in src/LifeViewer.hs
#C [[ NOGUI ]]
#C [[ COLOR BACKGROUND #f8f8f8 ]]
#C [[ COLOR ALIVE #000000 ]]
#C [[ COLOR ALIVERAMP #000000 ]]
#C [[ COLOR DEADRAMP #dfebf6 ]]
#C [[ COLOR GRID #f0f0f0 ]]
#C [[ GRID ]]
#C [[ GRIDMAJOR 0 ]]
#C [[ COLOR HISTORY #dfebf6 ]]
#C [[ COLOR MARK1 #803300 ]]
#C [[ COLOR MARKOFF #e0ae8f ]]

The Trickiest Recipe
To conclude, here’s the 23-bit still life with the most complicated
recipe at the time of writing: 47 steps and 178 gliders in total. This
was found through a Stomp search with unlimited depth and maximum
intermediate population of 32. If it works, it works!

x = 177, y = 491, rule = B3/S23
15bo$16bo$14b3o6$47bo$46bo$46b3o4bo$52bo$52b3o11$36bo$34b2o69bo$35b2o
66bobo$104b2o$70b2o38b2o38b2o$35b2o32bobo7b2o28bobo2bo36bo2bo$35bobo
31bobob2o4bobo27bobobobo35bobobo$35bo32b2obob2o4bo28b2obobobo31bob2o2b
obo$67bo2bo36bo2bo3bo32b2obobobo$67b2o7b2o29b2o43bo$77b2o72b2o$76bo26b
3o$105bo6b3o$104bo7bo42b3o$113bo41bo$151b2o3bo$150bobo$152bo17$114bo$
114bobo31bo$114b2o32b2o4bo$111bo35bobo2b2o$109bobo41b2o$110b2o5bo$115b
2o$116b2o40b2o$157b2o$60bobo96bo$30b2o29b2o7b2o38b2o38b2ob2o$31bo2bo
26bo9bo2bo36bo2bo36bobo$31bobobo35bobobo33bobobobo33bobobo$27bob2o2bob
o22bo8bob2o2bobo32bobo2bobo32bobo2bob2o$27b2obobobo21bobo8b2obobobo32b
o2bobobo32bo2bobobobo$32bo24b2o2b2o8bobo33b2o2bobo10bo22b2o2bobo$32b2o
28b2o8bo39bo3b2o4b2o28bo$39bo21bo53bobo5b2o$38b2o77bo$38bobo$33b3o$35b
o$34bo$27b2o$26bobo$28bo7$50bo$48bobo$49b2o3$27bo$25b2o$26b2o31bo$60bo
67bo$20bo37b3o66bo$21bo100bo4b3o$19b3o32b3o64bo$56bo64b3o$55bo72bo$22b
o104bo$22b2o103b3o$21bobo2$33b2o22b3o13b2o32b2o4b2o7b2o22b2o4b2o$30bo
2bo25bo10bo2bo33bo2bo2bo8bobo21bo2bo2bo$29bobobo24bo10bobobo34b2obobo
8bo24b2obobo$28bobo2bob2o28b2obobo2bob2o33bo2bob2o32bo2bobo$27bo2bobob
obo28bob2obobobobo33bobobobo32bobobobo$27b2o2bobo37bobo37bobo36bobo2bo
$32bo39bo39bo38bo3b2o$143bo$125b2o17bo$124b2o16b3o$b2o109b3o11bo$obo
111bo$2bo110bo3b2o27b3o3bo7bo$16b3o98bobo28bo3b2o6bobo$18bo39b2o57bo
29bo3bobo6b2o$17bo13b2o24bobo66b3o$31bobo25bo66bo21bo11b2o$31bo95bo20b
2o9bobo$75b2o70bobo11bo$74b2o$76bo9$13bo$14b2o$13b2o4$16bobo45bobo$17b
2o46b2o83bobo$17bo47bo78bobo3b2o$13b2o130b2o4bo$12bobo130bo$14bo6bo5b
2o4b2o38b2o38b2o38b2o$22bo4bo2bo2bo36bo2bo39bo39bo$20b3o5b2obobo35bobo
bo33b2ob2obo29bo3b2ob2obo$30bo2bobo32bobo2bobo31b2obo2bobo25bobo2bobob
o2bobo$30bobobobo30bo2bobobobo33bobobobo25b2o3bo2bobobobo$31bobo2bo19b
o10b2o2bobo2bo33b2obo2bo33b2obo2bo$33bobo21b2o14bobo27b3o7bobo37bobo$
24b2o7b2o21b2o15b2o28bo9b2o38b2o$23b2o38b2o39bo$25bo36bobo$64bo25bo9b
3o$90b2o10bo$89bobo9bo$64b3o$64bo$65bo4$11b2o$10bobo$12bo3$9b2o$8bobo$
10bo4$147bo$145bobo$146b2o$150bo$150bobo$144bo5b2o$103bo41b2o$101bobo
40b2o$102b2o2$25b2o6b2o30b2o6b2o38b2o38b2o$25bo7bo31bo7bo25b3o4b2o5bo
33bo5bo$26b3ob2obo21bo10b3ob2obo27bo4bobob2obo32bobob2obo$28bobo2bobo
20bo11bobo2bobo24bo7bobo2bobo30bobobo2bobo$30bobobobo17b3o15bobobo30b
2o3bobobo30b2o3bobobo$30b2obo2bo32b3obo2bo32b3obo2bo20bo11b3obo2bo$33b
obo22b3o8bo3bobo33bo3bobo22b2o4b2o3bo3bobo$33b2o25bo12b2o38b2o22b2o5bo
bo6b2o$27bo31bo84bo$28b2o35b2o$27b2o36bobo$65bo2$28b2o$27bobo$29bo2$
20bo$20b2o$19bobo15$64bo$62bobo$18bo44b2o$19bo$17b3o$62bo3b2o$27b2o4b
2o28bo2bobo4b2o38b2o38b2o$28bo4bo27b3o4bo4bo33b2o4bo33b2o4bo$28bob2obo
33b2ob2obo33bo2b2obo33bo2b2obo$25b2obobo2bobo30bo3bo2bobo27bo4bobo2bob
o33b2o2bobo$21bo3bob2o3bobobo30b2o3bobobo27bo2b2o3bobobo35bobobo$21b2o
6b3obo2bo23b3o6b3obo2bo25b3o4b3obo2bo32b3obo2bo$20bobo6bo3bobo26bo6bo
3bobo33bo3bobo33bo3bobo$33b2o26bo11b2o38b2o38b2o2$104b2o$105b2o$18b3o
83bo$20bo128bo$19bo129b2o3b2o$148bobo2b2o$155bo$139b2o$138bobo$140bo7$
77bo$78bo$76b3o13$33b2o38b2o38b2o38b2o$27b2o4bo33b2o4bo33b2o4bo33b2o4b
o$27bo2b2obo19bobo11bo2b2obo33bo2b2obo33bo2b2obo$29b2o2bobo18b2o13b2o
2bobo33b2o2bobo32b3o2bobo$21bobo8bobobo17bo17bobobo35bobobo35bobobo$
22b2o5b3obo2bo32b3obo2bo23bo8b3obo2bo33b2obo2bo$22bo5bo4bobo32bo4bobo
14bobo5bobo7bo2bobobo33bobobobo$28b2o3b2o34bo3b2o16b2o6b2o8bobob2o33bo
2bob2o$24bo40bo2b2o21bo11bo6bo33bo3bobo$25b2o36bobo37b2o39b2o3bo$24b2o
38b2o36bobo38bobo$71b2o$71bobo78bo$25bo37b2o6bo74b2o3b2o$25b2o37b2o79b
2o4bobo$24bobo36bo83bo25$33b2o38b2o38b2o38b2o$27b2o4bo33b2o4bo33b2o4bo
33b2o4bo$27bo2b2obo33bo2b2obo33bo2b2obo33bo2b2obo$28b3o2bobo32b3o2bobo
27bo4b3o2bobo32b3o2bobo$32bobobo35bobobo27bo7bobobo35bobobo$30b2obo2bo
33b2obo2bo25b3o5b2obo2bo33b2obo2bo$29bobobobo35bobobo35bobobo35bobobo$
29bobob2o21bo8bo3bobob2o35bo2b2o36bob2o$30bo26bo5bobo3b2o35bo3bobo39bo
$55b3o6b2o38bobo4b2o37bobo$60b2o43b2o43b2o$59bobo$23bo37bo11b2o33b2o
47bobo$24b2o4b2o40b2o34bobo46b2o$23b2o4b2o34b3o6bo33bo49bo$31bo35bo83b
2o$66bo3b2o78bobo$23b2o44bobo80bo$24b2o45bo$23bo121b2o$146b2o$145bo$
140bo$140b2o6b3o$139bobo6bo$149bo19b3o$169bo$170bo3b3o$174bo$175bo7$
95bobo$96b2o$96bo$103bo$33b2o38b2o26bobo9b2o38b2o$27b2o4bo33b2o4bo28b
2o3b2o4bo39bo$27bo2b2obo33bo2b2obo33bo2b2obo36b2obo$28b3o2bobo32b3o2bo
bo32b3o2bobo34bo2bobo$32bobobo35bobobo35bobobo35bobobo$30b2obo2bo33b2o
bo2bo24bo8b2obo2bo31b4obo2bo$31bobobo6bobo20bobo3bobobo23bobo8bo2bobo
31bo2bo2bobo$31bob2o7b2o22b2o3bobob2o23b2o10b2ob2o30b2o3b2ob2o$32bo10b
o22bo5bo31b3o$33bobo2b3o28bo36bo$34b2o2bo29b2o35bo43b2o$39bo28bobo38b
2o37b2o$109bobo38bo$31b2o76bo$32b2o$31bo24$163bo$33b2o38b2o38b2o38b2o
6b2o6bo$33bo39bo39bo39bo8b2o3b2o$30b2obo36b2obo36b2obo36b2obo14b2o$30b
o2bobo34bo2bobo34bo2bobo34bo2bobo$32bobobo35bobobo35bobobo35bobobo$28b
4obo2bo31b4obo2bo31b4obo2bo5bo25b4obo2bo$28bo2bobobo32bo2bobobo32bo2bo
bobo6bobo23bo2bobobob2o$32b2ob2o36bob2o35bo2b2o5b2o28bo2bobo7b2o$73bo
41bo2bo36bobo6b2o$72b2o43b2o37bo9bo2$37bo42bo4bo75b2o$32bo4bobo34b2o3b
2o3b2o32bo42bobo$32b2o3b2o36b2o2bobo2bobo31b2o2b3o36bo$31bobo40bo42bob
o2bo33b2o$26b2o95bo31bobo$27b2o128bo$26bo133b2o$160bobo$160bo17$125bo$
124bo$40bo83b3o$41b2o$33b2o5b2o3bobo25b2o38b2o38b2o$33bo11b2o26bo39bo
39bo$30b2obo12bo23b2obo6b2o28b2obo6b2o28b2obo$30bo2bobo2b2o30bo2bobo3b
obo28bo2bobo3bobo28bo2bobo$32bobobo2bo32bobobobo33bobobobo33bobobob2o
6bo$28b4obo2b2o30b4obo2b2o30b4obo2b2o8bo21b4obo2b2obo4b2o$28bo2bobobo
32bo2bobobo32bo2bobobo9b2o21bo2bobobo9b2o$32bo2bo36bo2bo37bobo4b2o3bob
o25bobo$35b2o38b2o36b2o4bobo31b2o$121bo37b2o$160b2o$159bo$68b2o8bo$69b
2o6b2o87b3o$68bo8bobo69bo7b2o7bo$72b3o74b2o6bobo7bo$74bo73bobo6bo$73bo
$155bo$155b2o$144b2o8bobo$143bobo$145bo13$87bo$85b2o$86b2o3$33b2o38b2o
38b2o$33bo39bo39bo$30b2obo36b2obo36b2obo$30bo2bobo2b2o30bo2bobo2b2o30b
o2bobo7bo4bo$32bobobo2bo32bobobo2bo32bobobo4b2o3b2o$28b4obo2bobo29b4ob
o2bobo29b4obo2bo5b2o3b2o$28bo2bobobobo30bo2bobobobo30bo2bobobo$33bobo
37bo2bo36bo2b3o$33bobo3bo32b2o38b2o4bo$34bo4bobo81b3o$39b2o82bo$124bo$
36b2o70b3o4b3o$35b2o73bo4bo$37bo71bo6bo$80bo$75bo3b2o$75b2o2bobo$74bob
o3$80b2o$79bobo$81bo!

#C [[ AUTOSTART ]]
#C [[ HEIGHT 1600 ]]
#C [[ ZOOM 3 ]]
#C [[ GPS 20 ]]
#C [[ GRID LOOP 140 ]]
#C Colours are set in src/LifeViewer.hs
#C [[ NOGUI ]]
#C [[ COLOR BACKGROUND #f8f8f8 ]]
#C [[ COLOR ALIVE #000000 ]]
#C [[ COLOR ALIVERAMP #000000 ]]
#C [[ COLOR DEADRAMP #dfebf6 ]]
#C [[ COLOR GRID #f0f0f0 ]]
#C [[ GRID ]]
#C [[ GRIDMAJOR 0 ]]
#C [[ COLOR DEAD #dfebf6 ]]

Please email me any comments or suggestions. Site built using Hakyll.

Okay, here’s a detailed summary of the provided text, aiming for approximately 1350 words.

This text details a collaborative project focused on systematically identifying the limits of still life formation within the Game of Life, specifically targeting 23-bit still lifes. The project aimed to determine the lowest population level at which a stable still life configuration could no longer be synthetically created through glider collisions. The work is primarily attributed to “gol” as the driving force of the project, working collaboratively with others, including “400spartans” who’d previously created a 154 population still life, and “vilc”. The central concept revolves around reducing the search space, and eventually, achieving a defined boundary for synthesizable still lifes.

Initially, a team of researchers, including gol(self), systematically tackled creating still lifes starting at 18 bits, then 19, 20, 21 and 22). The strategy was to achieve a lower bound within the known possibilities, and the current project aimed to pinpoint the last level where synthesis was possible. The project utilized a combination of computer searches and human intuition.

The team generated approximately 99.97% of target still lifes within the 23-bit space through extensive computer searches. This dramatically reduced the complexity of the search, allowing a focus on the final 1%, which posed the largest puzzle. It's worth noting, the team prioritized a strategy of ‘component farming’, by focusing on building new still lifes from known components, rather than relying solely on random and unguided collision experiments.

The final, most challenging still life, represented by population 23, required a complex 47-step synthesis. This still life, identified as xs23_g88m9icz1iu146, was achieved through a painstakingly constructed series of glider interactions and manipulations. The goal was not merely to find a stable arrangement but to understand the ‘rules’ governing the generation of still lifes at the boundary of systemability. The key to this was the creation of a ‘Mr. Component’ methodology.

A critical aspect of the project was the incorporation of a ‘tree search’ algorithm. This allowed the team to efficiently explore different synthetic pathways, pruning branches that clearly didn’t lead to the target still life. The concept of applying a “tree” – a branching search algorithm – to the problem was revolutionary. This algorithm efficiently eliminated large regions of the search space, reducing the computational load and making the project achievable. It built upon the simpler, more brute-force computer searches by exploring the implications of glider interactions and the construction of possible syntheses. It’s essentially a complex and recursive algorithm for solving the problem.

The team utilized the concept of “synthesizing components”. They identified distinct building blocks that could be combined in various sequences to create the desired still life. This modular approach was far more efficient than a purely random collision strategy. The methodology of “Mr. Component” combined the use of gliders to synthesize new components, assembling these parts into still lifes. This involved breaking down complex formations into smaller elements, which could be reassembled in different arrangements, rather than trying to find large-scale formations.

Gol's role was critical, particularly in the creation of the ‘Mr. Component’ method. This method, was essentially the core methodology used to identify and systematically synthesise the final still life. A crucial element of the project, this strategy, cut down the options to just those building blocks that were most likely to lead to a solution.

The team addressed the issue of “transfer” – taking components discovered in one still life and applying them to another. This was achieved using the script transfer.py, which effectively ‘re-used’ known still life arrangements, significantly reducing the overall complexity. The script was effectively a tool designed to move parts successfully from one still life to another.

The “tree search” algorithm, combined with the concept of building up still lifes from smaller components, allowed the team to tackle the most complicated still life in the 23-bit space. This was achieved by implementing search components into a system that prioritized what needed to be done, rather than haphazardly exploring all options.

The project’s results are significant within the context of the Game of Life modeling. Previously a large number of still lifes could be synthesized, but limits were only recognized as a boundary was established. The completion of this project has been of significance within the broader context of the Game of Life, and its evolution towards a clear boundary of what is possible.

Essentially, the project’s success stemmed from a combination of systematic computer searches, a ‘tree search’ algorithm, component building, and the ability to ‘transfer’ components between still lifes. This approach represents a sophisticated and remarkably effective method for understanding the complex dynamics that govern still life formation within the Game of Life.

The key output of the research is a definitive insight into the bounds of still life formation within the Game of Life. It demonstrated not only the ability to create a complex still life but also the systematic methodology that can be used to achieve this. This has provided a valuable foundation for future research within the Game of Life and its modelling.

The work highlighted the emergent nature of still life formation, emphasizing that while seemingly random glider collisions can generate complex formations, there are inherent limits. Furthermore, the project underscored the importance of strategic organization – breaking down the problem into manageable components and then systematically combining them—as a key to finding solutions. Finally, the overall undertaking represented a culmination of intelligent experimentation, strategic application of algorithms, and collaborative problem-solving.