Crystal 1D - template-based self replication
</COMMENT> <h4>Unfortunately, your browser does not support Java.<BR> A Java applet is the central focus of this page.<BR> You're encouraged to try again using a Java-aware browser.</h4>
A version of this applet using the native VM is available here


This applet displays a cellular automata substrate displaying a novel type of self-reproducing automaton.


Most modern self-reproducing automata are based either on loops (descended from Langton's loop) or worms - which are very similar structures to loops, but which feed developmental information back along their spines, rather than touching their heads to their tails.

Both these structures have something in common, namely they rely on passing each segment through a "splitter" to accomplish self replication.

This automaton works on a rather different principle. It reproduces by synchronous template reproduction. Reproduction alternates with a stage of motion which separates mother and daughter, so subsequent births have space to happen in.


The design was inspired by the theories of A. G. Cairns-Smith.

Cairns-Smith envisages that the first organisms used the processes of crystal growth to maintain high-fidelity information transfer across generations.

For example, some crystals grow in one direction, while preserving information (in the form of cross-sectional area, and fault structures) between layers as the crystal grows.

The result is a long crystal, somewhat like a stick of rock with "Brighton" written down the middle. Then the crystal breaks in two, and the process continues.

Initially, I planned to write a relatively sophisticated simulation of crystal growth on the level of atoms and atomic forces. However, it was not long before I was thinking about abstracting the essential features into a cellular automaton.

The resulting design is relatively simple. It has five states per cell, plus a counter, which is used to attain synchrony when reproducing.

The automaton uses the Von-Neumann neighbourhood.

Like HexHAL random configurations are likely to spontaneously lead to self-reproducing entities, in a manner reminiscent of abiogenesis.

On the error rate

The automaton displays replication with sufficiently high fidelity to preserve genetic information across many generations.

However, like practically all such models there is a "natural" preference for small organisms - since these are less likely to interfere with the reproduction of their own offspring.

If the automaton is allowed to run, smaller organisms will come to dominate.

Normally, one would apply selection in a manner which counteracts this.


This is my first attempt at an automaton based on the principles described - and there may be room for improvemnets.

Because of considerations relating to embedding universal automata on the back of self-reproducing automata, the fact that a two-dimensional automaton results in organisms that are fundamentally one-dimensional is a significant problem.

If one has an n-dimensional substrate available, one is unlikely to be satisfied designing n-1-dimensional circuits.


The basic idea of attaining synchrony - and then reproducing in a synchronous manner - can be used to produce a substrate in which genuinely two-dimensional organisms reproduce. Such a model probably more closely represents crystalline growth processes. It's disadvantage over the mechanism illustrated here is that it is not so simple.

It's intended that the next self-reproducing automaton we create will be along these lines.

Interactive controls

The applet is interactive, allowing you to apply selection based on organisms visual characteristics using a variety of implements.

  • Use - tool selection - controls which type of tool to use to manipulate the environment;
  • Click to - set the tool's behavior - controls how the tool in use is applied;
  • Display - controls which aspect of the automata is presented;
  • Size - controls how many cells are displayed, and their size;
  • Show - configures how frequently the display is updated;
  • Delay - configures how much delay occurs between frame updates;
  • Radiation - causes random deletions;
  • Mutation - causes random modifictions to the organisms;
  • Step - allows a paused automata to be single-stepped;
  • Pause - allows the automata to be stopped and started;
  • Clear - completely blank all the universe's cells;
  • Randomise - configure all cells randomly;
  • Restart - resets the universe to its initial configuration;


This applet can also be run as an application. Download this jar file (using shift-click) and double-click on it.
Source code is available - with a "no-restrictions" license. Download this zip file.

Index | HAL | HexHAL | EoSex | Firefly | CA | Links |