Two dimensions are very easily represented on a piece of paper, so let’s make a 2-dimensional space-time universe mathematically, before moving on to more dimensions.

A linear 1-dimensional set is easy to imagine. For example, consider the integers. We have a 1-dimensional array, where each point *a* depends on one predecessor *b* only. You could say *a = successor(b) *or *a=b+1* to generate the integers.

Extending this to two dimensions D1 and D2 is interesting. Here *a* depends on three predecessors *b, c* and *d*. We will look at the generating formula:

*a = b + c – d. *

We could have picked any other definition of predecessors and generating formula, but this one has some interesting properties.

It is very interesting to see that the space and time dimensions don’t correspond to D1 and D2, but go diagonally through both. Using our generating formula each point *a* depends on two numbers, *b* and *c*, the time step before it and one number two time steps before, *d*.

We cannot just postulate D1 and D2 geometrically as perpendicular dimensions, we need to define them mathematically. Conveniently there is a 2-dimensional mathematical set which we can use: the complex numbers. In fact we will only use complex numbers where the real and imaginary parts are both integers. They are also called Gaussian integers.

Each point on our grid has a complex coordinate:

*p = x + iy* (where *x* and *y* are integers).

Each point on the grid also contains a Gaussian integer, we can look at it as a 2-D vector, or the value of a field at that point. This value *V(p)* depends on the values of the predecessors of *p*.

For this exercise, let’s say that we want to fill up the grid so that each point contains its own coordinates, i.e. such that *V(p) = p*.

For the (one-dimensional) axes this is easy. We need:

- a generating formula and
- an initial condition (the number at the origin).

We take 0 as the number at an arbitrary point that serves as the origin and +1 and +i as the generating formulae for the real integer and imaginary integer axes respectively.

To indicate the distance of each point from the origin, we use the term ‘generation’. The first generation depends directly on the origin. Generation 2 depends on generation 1, and so on. Generation n depends on generation n-1.

The next diagram shows the generations for two dimensions.

The grey boxes are the real and imaginary axes; the bottom left square is the origin. Generation 1 only depends on grey boxes, generation 2 depends on generation 1 (and grey boxes) etc.

To fill up the grid such that each square contains its coordinates (*V(p) = p*) we can use several generating formulae. One of the simplest is the one we met above:

V(p) = V(p-1) + V(p-i) -V(p-1-i)

And the initial condition of

V(0)=0

This formula as also been investigated by Rudy Rucker [[i]].

We have now defined a very orderly function. In fact the ‘time’ dimension in the orderly example above does not qualify as a time dimension at all, because it lacks a complexity gradient. In order to inject some complexity, we can either:

- change the generating formula, or
- change the initial condition

Let’s investigate the latter. It is interesting to look at the effect very far from the origin, so we will rotate the grid by 135° to make the time axis run downwards. This way we can examine a rectangular piece of space-time.

Here we see the direction of the time and space axes used in the following diagrams. Each point P depends on 3 predecessors, 2 of them one generation behind and one 2 generations behind (green lines). If we take the grid spacing as 1, we can see that the smallest space unit and the smallest time unit are both √2.

At each point in space-time (shown as a blue dot in the diagram) we can plot the value at that point as a 2-D vector.

In the simulations that we show below, we enter values for the top two rows of points, the other vectors are calculated.

First we use zeros for the first two rows:

As we can see, the vectors of the future points (i.e. the later generations) are also zero. No fields are spontaneously generated.

Now let’s have a discontinuity in our initial rows:

Not very interesting, but we can see that the effect of the discontinuity travels at a constant speed. It is easy to see that this speed, one space unit per one time unit, is the maximum speed that any effects can travel in the grid (this is the “speed of light” in this 2-D universe).

Let us now create a more orderly pattern for the first two rows:

As we can see, the field vectors don’t grow towards infinity. Remember that the time axis is down and the space axis across, so at each point there is a pulsating and spinning vector.

Each vector has two integer components. We could look at all the arrows together as one field, or we could treat the components separately as two fields.

What we can’t get with two dimensions are particles. In two dimensions any effect always propagates at the speed of light. In more than 2 dimensions, given the right generating formula and conditions, we could get a pattern that curves back on itself. For example in three dimensions (two space and one time) we could get a pattern that looks like a helix from the outside and like a spinning pattern from within that time dimension. This pattern moves at a speed less than the speed of light and could be considered a particle.

Now let’s use slightly more complex vectors for the first two rows:

Here we see some quite complex interactions taking place.

[[i]] Rudy Rucker, 1998, Continuous Valued Cellular Automata for Wave Equations