Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

What is a glider synthesis?

A number of gliders hitting a constellation of still-lifes or oscillators that produces another constellation of still-lifes or oscillators.

How do we encode a glider synthesis?

By a single line string consisting of 8 fields separated by 7 semi-colons, like so:


What are these fields?

input_apgcode is a string representing the input constellation.

output_apgcode is a string representing the output constellation.

phase is a non-negative integer.

ne_data is a comma separated list of integers giving the positions of all north-east traveling gliders.

se_data, sw_data and nw_data are similarly defined.

transform is a comma separated list of 6 integers.

What are apgcodes?


How exactly is the glider data defined?

All of the xx_data fields are comma separated lists containing an even number (possibly zero) of integers.

Each pair of integers represents a single glider.

The integer pair 0, 0 represents the canonical glider for each direction.

The canonical glider for the north-west direction is 3o$o$bo!. Cell (0,0) is on and all live cells have non-negative x and y coordinates.

The canonical gliders for the other directions are generated by the reflections x -> -x and y -> -y.

The integer pair x, t represents the canonical glider shifted horizontally by x cells and advanced in time by t generations. If t is negative then this is taken to mean that the canonical glider should be rewound by -t generations.

How are the input and output apgcodes related to all this?

The answer to this question will reveal the intention of the fields phase and transform.

To get the full input pattern, draw the input_apgcode at the origin of the universe and draw all of the gliders defined by the four xx_data fields.

Call the input pattern X.

The output pattern is just the output_apgcode drawn at the origin of the universe. Call the output pattern Y.

Remember that phase is a non-negative integer and transform is a comma-separated list of six integers.

If transform is given by a, b, c, d, e, f then it represents the transformation T:(x,y) -> (a + c * x + d * y, b + e * x + f * y).

Define Y to be T(Y) advanced by phase generations.

It is expected that for all sufficiently large values of t that X advanced by t generations is precisely the same pattern as Y' advanced by t generations.

When is a glider synthesis considered canonical?

Well, ... when it is output of the cananicaliser script.

But if you want more details.....

The input and output apgcodes should be canonical apgcodes.

phase must be strictly less than the period of the output apgcode.

The pairs in each xx_data list should be sorted in ascending lexicographic order.

If the input apgcode is non-zero then draw the input pattern at the origin. Run the pattern through a full cycle and note the LifeHistory envelope. A cell is forbidden if its x-value (or its y-value) is within distance 2 of an x-value (or a y-value) of the cells in the LifeHistory envelope.

In the case of a non-zero input apgcode, a glider synthesis is at canonical time if:

  • none of the gliders contain a forbidden cell now
  • none of the gliders contain a forbidden cell if we rewind by an arbitrary amount
  • by the next time the input pattern is in canonical phase at least one glider has encountered a forbidden cell

If the input apgcode is 0 then we define the canonical time using the separation between gliders travelling in different directions.

If a north traveling glider and a south traveling glider have 6 on-cells in a single horizontal line then define that they have time difference 0.

Time differences for gliders in other phases and locations can be calculated relative to this.

Time differences between east and west traveling gliders can be computed by rotating by 90 degrees and using the north-south definition.

If the input apgcode is 0 then a glider synthesis is at canonical time if:

  • all north traveling gliders are at least 12 ticks away from all south traveling gliders.
  • all east traveling gliders are at least 12 ticks away from all west traveling gliders.
  • there is a pair of north-south gliders or a pair of east-west gliders that are 12 or 13 ticks away from each other.

If the input apgcode is 0 and the glider synthesis is canonical in time then to be considered canonical the glider synthesis must consist of only cells with positive x and y coordinate and there must be at least one cell with x-coordinate zero and at least one cell with y-coordinate zero.

If the input constellation has N symmertries then there can be up to N glider syntheses that are the same up to translation, reflection or rotation and satisfy all the conditions given so far. We define an ordering on the tuples (ne_data, se_data,sw_data, nw_data) to define which glider synthesis is canonical.

We order glider data for a single direction by ranking:

  • smaller glider salvos before larger glider salvos
  • glider salvos of equal length by lexicographic order.

We order tuples of glider data by the lexicographic order implied by this ordering.

Now the canonical generation and canonical transformation for the input have been defined.

There can still be more than one valid output transformation. To be canonical the output transform must have its last four integers appear as early as possible in this list:

[(1, 0, 0, 1), (-1, 0, 0, 1), (1, 0, 0, -1), (-1, 0, 0, -1),
 (0, 1, 1, 0), (0, -1, 1, 0), (0, 1, -1, 0), (0, -1, -1, 0)]


Canonical two-glider boat synthesis:



x = 10, y = 8, rule = B3/S23

Canonical pond -> tub reaction:



x = 9, y = 15, rule = B3/S23


No description, website, or topics provided.






No releases published


No packages published