CITE THIS NOTEBOOK: Unique father problem: Conway conjecture settled by Paul Abbott. Wolfram Community NOV 17 2022.
John Conway’s Game Of Life is endlessly fascinating. In 1972—50 years ago—Conway posed the unique father problem: ​ Is there a stable configuration whose only father is itself?​If such a configuration occurs within a universe at time
T
, then it must have existed in the same position at time
T−1
. In this note the solution found by Törmä and Salo in January 2022 is implemented and visualized.

Introduction

Searching for the Game of Life on the Wolfram Community one finds many useful examples:
◼
  • Conway’s Game Of Life, in three lines of code
  • ◼
  • Several related Wolfram Demonstrations
  • ◼
  • Glider Database by Ed Pegg
  • The (standard) Game of Life rule B3/S23 (birth/survival) is, of course, built-in. Here is the operator form of
    CellularAutomaton
    representing one step of evolution:
    In[]:=
    GoL=CellularAutomaton["GameOfLife"];
    Use
    RulePlot
    to examine the rule:
    In[]:=
    RulePlot@GoL
    Out[]=

    Interactive Board

    Start with an empty grid:
    In[]:=
    grid=ConstantArray[0,{15,20}];
    Apply
    SetOptions
    to
    ArrayPlot
    to format the display of such grids:
    In[]:=
    SetOptions[ArrayPlot,{MeshTrue,MeshStyleLightGray,DataReversedTrue}];
    Here is our empty grid:
    In[]:=
    ArrayPlot[grid]
    Out[]=
    Allow interactive input via mouse clicks using
    ClickPane
    to define the current state:
    In[]:=
    state=grid;
    In[]:=
    n=0;
    In[]:=
    ClickPane[Dynamic[ArrayPlot[state]],(state=ReplacePart[state,(Reverse@Ceiling@#)1-Extract[state,Reverse@Ceiling@#]])&]
    Out[]=
    Compute three applications of the game of life rules:
    In[]:=
    ArrayPlot/@NestList[GoL,state,3]//GraphicsRow
    Out[]=
    Dynamically update the state and the iteration label:
    In[]:=
    Dynamic@ArrayPlot[state=GoL@state,PlotLabel++n]
    Deleting this output stops its execution—but note that the above
    ClickPane
    is still being continuously updated!

    Glider

    Here is the simplest glider input using a matrix and
    PadLeft
    :
    In[]:=
    glider=PadLeft[{{1,1,1},{0,0,1},{0,1,0}},{20,-20}];
    In[]:=
    ArrayPlot@glider
    Out[]=
    Dynamically update the glider—and delete the output to stop execution:
    Dynamic[ArrayPlot[glider=CellularAutomaton["GameOfLife"]@glider]]

    Solution to the Unique Father Problem

    An image of the (stabilised) configuration, related to the original solution found by Törmä and Salo, was published here in January:
    In[]:=
    img=
    ;
    This configuration of live and dead cells is surrounded by an infinite background of grey “don't care” cells.
    So, one way to investigate this solution is to use
    Image Processing
    .

    First Approach

    Using
    ColorSeparate
    we can simplify the image:
    In[]:=
    i=ColorSeparate[img,{"Black"}][[1]]
    Out[]=
    Extract the live and dead cells as follows:
    This simpler 306-cell configuration was actually obtained by Oscar Cunningham:
    As a check, apply the Game of Life rules to the stabilised configuration:
    This appears to be identical. We can explicitly verify that stabilised is a solution as follows:

    Second Approach

    Markus van Almsick supplied me with the following automatic routine to detect a dark grid and to sample the brightness values in each grid cell:
    Verify that stabilised2 is identical to stabilised:

    Run Length Encoded Version

    The Run Length Encoded (or RLE for short) file format is commonly-used for storing Game of Life patterns. However, I could not find an implementation to decode this format in the Wolfram Language. But coding it up is not that hard.
    From the description, the first line is a header line, which has the form
    x = m, y = n
    Here are replacement rules for <run_count> and <tag>:
    <run_count> can be omitted if it is equal to 1—and this is also implemented as a replacement rule:

    Gosper Glider Gun

    As a check of RLDecode here is the RLE for the Gosper glider gun:
    #N Gosper glider gun
    #C This was the first gun discovered.
    #C As its name suggests, it was discovered by Bill Gosper.
    x = 36, y = 9, rule = B3/S23
    24bo$22bobo$12b2o6b2o12b2o$11bo3bo4b2o12b2o$2o8bo5bo3b2o$2o8bo3bob2o4b
    obo$10bo5bo7bo$11bo3bo$12b2o!
    Extract the RLE string:
    Dynamically update the glider—and delete the output to stop execution:

    Original Solution

    The original RLE solution to the unique father problem is given here.
    x = 32, y = 26, rule = B3/S23
    2 b2obo2b2obo2b2obo2b2obo2b2obo$2bob2o2bob2o2bob2o2bob2o2bob2o$2o4b2o4b
    2 o4b2o4b2o4b2o$bob2o2bob2o2bob2o2bob2o2bob2o2bo$o2b2obo2b2obo2b2obo2b
    2 obo2b2obo$2o4b2o4b2o4b2o4b2o4b2o$2b2obo2b2obo2b2obo2b2obo2b2obo$2bob
    2 o2bob2o2bob2o2bob2o2bob2o$2o4b2o4b2o4b2o4b2o4b2o$bob2o2bob2o2bob2o2b
    ob2o2bob2o2bo$o2b2obo2b2obo2b2obo2b2obo2b2obo$2o4b2o4b2o4b2o4b2o4b2o$
    2 b2obo2b2obo2b2obo2b2obo2b2obo$2bob2o2bob2o2bob2o2bob2o2bob2o$2o4b2o4b
    2 o4b2o4b2o4b2o$bob2o2bob2o2bob2o2bob2o2bob2o2bo$o2b2obo2b2obo2b2obo2b
    2 obo2b2obo$2o4b2o4b2o4b2o4b2o4b2o$2b2obo2b2obo2b2obo2b2obo2b2obo$2bob
    2 o2bob2o2bob2o2bob2o2bob2o$2o4b2o4b2o4b2o4b2o4b2o$bob2o2bob2o2bob2o2b
    ob2o2bob2o2bo$o2b2obo2b2obo2b2obo2b2obo2b2obo$2o4b2o4b2o4b2o4b2o4b2o$
    2 b2obo2b2obo2b2obo2b2obo2b2obo$2bob2o2bob2o2bob2o2bob2o2bob2o!
    Extract the RLE string:
    The original finite stabilisation has 374 live cells:
    So the original solution looks somewhat different to the simplified solution above by Oscar Cunningham.
    Verify that stable is a solution: