The Last Theory
The Last Theory
The Last Theory
11 December 2025

How to simplify the causal graph

Thanks for subscribing to The Last Theory newsletter

Check your inbox for an email to confirm your subscription

Oh no, something went wrong, and I was unable to subscribe you!

Please refresh your browser and try again

This makes my head hurt:

It’s the causal graph for a simple rule of Wolfram Physics:

after just four iterations:

If we’re going to find mass/energy or momentum in Wolfram Physics – or special relativity or general relativity or quantum mechanics – then the causal graph is the place to look.

But if we’re going to have to find all of physics in this causal graph...

...then I give up.

It’s too hard for me to wrap my head around.

It looks like spaghetti.

If we’re going to find all of physics in the causal graph, then we’re going to have to simplify.

How are we going to simplify the causal graph?

Two ways:

  • use a simpler rule; and
  • collapse multiple nodes representing the same event into a single node.

Don’t worry, by the time we’re done, that’ll all make sense!

A simpler rule

For starters, let’s use a simpler rule.

The rule we’ve been using...

...seems pretty simple, but it’s not that simple.

After just a couple of hundred applications of this rule, the hypergraph is pretty complex:

I mean, this hypergraph is so chaotic that I can’t even tell whether it’s two-dimensional, three-dimensional or 3.37-dimensional.

Remember, the hypergraph is space.

So a chaotic hypergraph means a chaotic space.

Much of the physics we’re trying to find here – momentum, special relativity, general relativity – is about the relationship between space and time.

It’s hard to imagine how we’ll see the simple space-time relationships of relativity in such a chaotic space.

So we’re going to ditch this pretty simple rule:

and use an extremely simple rule instead:

This rule matches two edges pointing outwards from the same node, deletes them, and creates two new edges between the same nodes, pointing inwards.

The rule doesn’t change the nodes, it just flips the edges around so that they’re no longer pointing outwards, they’re pointing inwards.

Simple.

So simple, in fact, that we can use it to evolve a one-dimensional universe.

One-dimensional

Let’s start with this one-dimensional universe:

Since the rule just flips the edges without changing the nodes, this hypergraph is going to stay one-dimensional, with these same 7 nodes, no matter how many times we apply the rule.

All that’s going to change is that the rule’s going to flip the edges pointing outwards to edges pointing inwards:

OK, let’s take a closer look at what just happened.

From the initial state of the universe, there’s only one place we can apply the rule:

Remember, the rule matches two edges pointing outwards from the same node, and there’s only one possible match, these two edges pointing outwards from node 4:

The rule deletes the two edges:

and replaces them with two edges pointing inwards towards node 4:

In other words, the rule flips the edges either side of node 4 so that they’re no longer pointing outwards, they’re pointing inwards:

After this first iteration, there are two possible ways we could apply the rule. We could match the two edges pointing outwards from node 3:

or we could match the two edges pointing outwards from node 5:

If we do the former, matching the two edges from node 3, we get to a state of the universe:

from which, again, there are two possible ways we could apply the rule: match the edges pointing outwards from node 2:

or match the edges we could have matched at the previous iteration, but didn’t, the edges pointing outwards from node 5:

If, at the previous iteration, instead of the two edges from node 3, we match the two edges from node 5, we get to a state of the universe:

from which, once again, there are two possible ways we could apply the rule: match the edges we could have matched at the previous iteration, but didn’t, the edges pointing outwards from node 3:

or match the edges pointing outwards from node 6:

OK, it’s getting hard to keep track of all these possibilities.

Let’s draw a multiway graph.

All roads lead to Rome

Going back to where we started, from the initial state of the universe, there’s only one way we can apply the rule, so the multiway graph starts with a single red arrow:

As we saw, from the resulting state of the universe, there are two ways we can apply the rule, so the multiway graph branches:

And as we saw, from each of these two resulting states of the universe, there are two ways we can apply the rule, so the multiway graph branches again:

As you can see, this results in three possible states of the universe, not four, because two of the paths through the multiway graph result in the same universe.

From here, by applying the rule in every possible way at every iteration, we can complete the multiway graph:

Our multiway graph now shows all the possible paths we might take through the universe, all the possible ways in which we can flip the edges around, two by two, to get from the universe in which they’re all pointing outwards to the universe in which they’re all pointing inwards.

You’ll have noticed that this is a closed universe.

No matter which path we take through the multiway graph – no matter which of the possible ways we choose to flip the edges at each iteration – we end up in the same place – the universe in which all the arrows are pointing inwards – a universe from which there’s nowhere left to go, no possible further applications of the rule.

Spaghetti

Now let’s add the events to the multiway graph.

Going back again to where we started, from the initial state of the universe, there’s one possible event, the one that matches the edges pointing outwards from node 4, and flips them around so that they’re pointing inwards towards node 4:

As you can see, I’m drawing the event as a white oblong:

At the top of the oblong, I’m showing the edges matched by the event: the two edges pointing outwards from node 4 towards nodes 3 and 5.

And at the bottom of the oblong, I’m showing the edges after those matched edges have been deleted by the event and two new edges have been created by the event: the edges pointing inwards towards node 4 from nodes 3 and 5.

From the resulting state of the universe, there are two possible events, one that flips the edges pointing outwards from node 3 and one that flips the edges pointing outwards from node 5:

Again, you can see how I’m drawing the events as white oblongs. The event on the left shows the matching and flipping of the edges either side of node 3. The event on the right shows the matching and flipping of the edges either side of node 5.

And from each of the two states of the universe that follow, there are two possible events, resulting in three possible states of the universe:

These four events flip the edges either side of nodes 2, 5, 3 and 6:

And...

Well, actually, I’m going to pause there.

I mean, I could add all the remaining events:

...and I could add yellow arrows, showing which events have to happen before which other events can happen, to complete the causal graph...

...but, honestly, I know what’s going to happen.

Spaghetti.

We’re using an extremely simple rule:

and we’re applying it to an extremely simple universe:

which remains one-dimensional and closes after just nine iterations:

It doesn’t get much simpler than this.

And yet, in spite of such extreme simplicity, we still have a multiway graph with thirty events:

Adding yellow arrows for each of these events is still going to give us a causal graph that makes my head hurt.

Over and over

I’m pausing here because I’ve noticed something.

Maybe you’ve noticed it too.

Those two events at the second iteration of the universe:

look suspiciously like these two events at the third iteration of the universe:

In each case, one of the events flips the edges either side of node 3, and the other event flips the edges either side of node 5.

So why are we drawing these events twice?

When we draw the multiway graph, if, following two different paths, we arrive at two states of the universe that are the same, we don’t draw this state of the universe twice, we draw it only once, with two red arrows pointing to it, representing the two paths by which we might arrive at it:

So why don’t we do the same with the causal graph?

If, at different junctures in the evolution of the universe, we’re able to apply the rule to the same edges, instead of drawing this same event twice, or three times, or more, why don’t we draw it only once?

Now that could seriously simplify the causal graph.

How many of these thirty events:

are duplicates, or triplicates, or worse?

How simple would the causal graph be if, instead of drawing all these events multiple times, we drew each of them only once?

Identity crisis

To answer that question, we need to get precise about what we mean when we say that two or three or more events are the same event.

Take the first event that happens in our universe, the one that flips the edges either side of node 4 so that they’re no longer pointing outwards, they’re pointing inwards:

It looks suspiciously like the last event that happens in our universe, which also flips the edges either side of node 4 so that they’re no longer pointing outwards, they’re pointing inwards:

Are these the same event?

Well, no, they’re not.

Here’s why.

Both events match edges from node 4 to nodes 3 and 5.

But these are not the same edges.

We can see this by taking another look at that first event.

Remember, this event matches the two edges pointing outwards from node 4:

deletes them:

and replaces them with two edges pointing inwards towards node 4:

The crucial word there is deletes.

This first event in our universe deletes the edges from node 4 to nodes 3 and 5.

These edges are gone forever.

When we get to the last event in our universe, these original edges no longer exist.

To be clear, at this last event, there are edges from node 4 to nodes 3 and 5, but these are not the same edges as were matched – and deleted – by that first event, they’re different edges, created by one of these subsequent events:

When we’re trying to determine whether two events are the same, it’s not enough to check whether the edges they’re matching are between the same nodes.

We need to check whether they’re the same edges.

Not edges that look like other edges that have long been deleted.

The same edges.

And to do that, we’re going to need to start labeling the edges, so that we can keep track of which is which.

Labeling edges, labeling events

Let’s start at the top.

Here, again, is the initial state of the universe:

The nodes are labeled – 1 through 7 – but the edges are not.

So let’s add labels:

You can see how I’ve labeled the edges.

The edge from node 2 to node 1 is labeled {2, 1}, the edge from node 3 to node 2 is labeled {3, 2}, and so on up to the edge from node 6 to node 7, labeled {6, 7}.

Each of the labels has a suffix, 0, indicating that the edge existed at the beginning of the universe. So the edge {4, 5}0 is the edge from node 4 to node 5 that existed at the beginning of the universe.

This suffix will allow us to distinguish between this edge – which, spoiler alert, is going to be deleted by the first event – and other edges from node 4 to node 5 that’ll be created by subsequent events.

So let’s get to that first event.

As you’ll remember from the multiway graph, it’s the event that matches the two edges pointing outwards from node 4, deletes them, and creates two edges pointing inwards towards node 4:

Let’s label this first event a:

So where does that leave us as far as the edges are concerned?

Well, from the initial state of the universe:

event a matches edges {4, 3}0 and {4, 5}0:

deletes them:

and creates two new edges:

I’ve labeled these new edges {3, 4}a and {5, 4}a, because one is from node 3 to node 4 and the other is from node 5 to node 4.

And the suffix a?

Well, in contrast with the suffix 0, which indicates that an edge existed at the beginning of the universe, the suffix a indicates that the edge was created by event a.

So we now have a way of distinguishing edges that existed at the beginning of the universe from edges created by subsequent events.

And, crucially, we have a way of identifying events from the edges they match.

Specifically, we can identify a as the event that matches edges {4, 3}0 and {4, 5}0, deletes them and creates edges {3, 4}a and {5, 4}a:

a ≡ {4, 3}0{4, 5}0{3, 4}a{5, 4}a

Actually, much of that identification is redundant. If a is the event that matches edges {4, 3}0 and {4, 5}0, then we know from the rule that it must delete them and create edges {3, 4}a and {5, 4}a. All we need to know to identify event a is that it’s the event that matches edges {4, 3}0 and {4, 5}0:

a ≡ {4, 3}0{4, 5}0

Next level

Now that we have a way to identify edges and a way to identify events, let’s go back to the multiway graph.

After event a, there are two possible events, the one that flips the edges pointing outwards from node 3 and the one that flips the edges pointing outwards from node 5:

Let’s label these events b and c:

As for the edges involved in events b and c, well, event a resulted in this state of the universe:

If we follow one path through the multiway graph, event b happens. It matches edges {3, 2}0 and {3, 4}a:

deletes them:

and creates two new edges:

I’ve labeled these new edges {2, 3}b and {4, 3}b, because one is from node 2 to node 3 and the other is from node 4 to node 3, and they’ve both been created by event b.

If, on the other hand, we follow the other path through the multiway graph, event c happens. It matches edges {5, 4}a and {5, 6}0:

deletes them:

and creates two new edges:

I’ve labeled these new edges {4, 5}c and {6, 5}c, because one is from node 4 to node 5 and the other is from node 6 to node 5, and they’ve both been created by event c.

That’s a lot, but remember, all we need to know to identify events b and c is the edges they match.

b is the event that matches edges {3, 2}0 and {3, 4}a:

b ≡ {3, 2}0{3, 4}a

and c is the event that matches edges {5, 4}a and {5, 6}0:

c ≡ {5, 4}a{5, 6}0

Third time’s a charm

Back, again, to the multiway graph.

At the third iteration of the universe, there are four possible events:

The first flips the edges pointing outwards from node 2. Specifically, it matches edges {2, 1}0 and {2, 3}b. This is the first time we’ve seen an event that flips the edges either side of node 2. It’s a new event. Let’s label it event d.

d ≡ {2, 1}0{2, 3}b

The second of the four events flips the edges pointing outwards from node 5.

Wait a minute.

We’ve already seen an event that flips the edges pointing outwards from node 5.

Event c.

Now that we have a way to identify edges and a way to identify events, we can check whether this event is the same as event c, in other words, whether it matches the same edges.

Event c, remember, matched edges {5, 4}a and {5, 6}0:

c ≡ {5, 4}a{5, 6}0

This event also matches edges {5, 4}a and {5, 6}0.

It’s the same event.

It’s event c.

Let’s label it accordingly:

This is a crucial insight in our simplification of the causal graph, so let’s run through it again, step by step, so that we can see precisely how this event is the same as event c.

Following this path through the multiway graph:

from the initial state of the universe:

event a matches edges {4, 3}0 and {4, 5}0:

deletes them:

and creates two new edges {3, 4}a and {5, 4}a:

taking us to this state of the universe:

Then, event b matches edges {3, 2}0 and {3, 4}a:

deletes them:

and creates two new edges {2, 3}b and {4, 3}b:

But you can see that event b leaves edges {5, 4}a and {5, 6}0 untouched. These are the edges that would have been matched at this second iteration if event c had happened instead of event b. Because event b leaves these edges untouched, they’re still there to be matched by event c. In other words, event c can still happen at the third iteration, even after event b has happened at the second iteration.

Here’s how it goes. From the state of the universe after event b:

event c matches edges {5, 4}a and {5, 6}0:

deletes them:

and creates two new edges {4, 5}c and {6, 5}c:

taking us to this state of the universe:

It’s the same with the third of the four events at the third iteration of the universe.

This event flips the edges pointing outwards from node 3.

Again, we’ve already seen an event that flips the edges pointing outwards from node 3.

Event b matched edges {3, 2}0 and {3, 4}a:

b ≡ {3, 2}0{3, 4}a

This event also matches edges {3, 2}0 and {3, 4}a.

It’s the same event.

So we can label it event b:

The last of the four events flips the edges pointing outwards from node 6. Specifically, it matches edges {6, 5}c and {6, 7}0. This is the first time we’ve seen an event that flips the edges either side of node 6. It’s another new event. Let’s label it event e.

e ≡ {6, 5}c{6, 7}0

One more time

This is a lot, I know, but I’m going to take you one level deeper into the multiway graph, because I want to show you an instance in which two events look the same, but are not the same.

At the fourth iteration of the universe, there are five possible events:

These events flip the edges pointing outwards from nodes 5, 2, 6, 3 and 4, respectively.

It’s not the first time we’ve seen events like these. Events c, d, e, b and a also flip the edges pointing outwards from nodes 5, 2, 6, 3 and 4.

But just because these events at the fourth iteration look the same as events c, d, e, b and a, they might not be the same.

Let’s take a closer look at the edges.

If we were to follow the evolution of the universe along all the different paths through the multiway graph, we’d find that the events at the fourth iteration of the universe match these edges:

1st event ≡ {5, 4}a{5, 6}0

2nd event ≡ {2, 1}0{2, 3}b

3rd event ≡ {6, 5}c{6, 7}0

4th event ≡ {3, 2}0{3, 4}a

5th event ≡ {4, 3}b{4, 5}c

As we’ve seen, however, events c, d, e, b and a match these edges:

c ≡ {5, 4}a{5, 6}0

d ≡ {2, 1}0{2, 3}b

e ≡ {6, 5}c{6, 7}0

b ≡ {3, 2}0{3, 4}a

a ≡ {4, 3}0{4, 5}0

So we can see that the first four of the five events are, indeed, the same as events c, d, e and b.

They match the same edges.

Let’s label them accordingly:

But the last of the five events, though it, like event a, flips the edges pointing outwards from node 4, is not the same as event a.

This last of the five events matches edges {4, 3}b and {4, 5}c, which were created by events b and c respectively.

Event a, in contrast, matches edges {4, 3}0 and {4, 5}0, which existed at the beginning of the universe, and were deleted by event a at the very first iteration.

These two events match different edges.

They’re different events.

So let’s call this last of the five events f:

f ≡ {4, 3}b{4, 5}c

And then there were nine

We can complete the process of labeling the edges and the events for each of the remaining iterations.

Interestingly, for this simple rule applied to this simple, one-dimensional universe, almost all of the remaining events are the same as events we’ve already come across.

At the fifth iteration of the universe, each of the six possible events is the same as event d, e or f:

At the sixth iteration, three of the five events are the same as events d, e and f, but there are two new events, which we can label g and h:

Event g looks like event b, in that it flips the edges pointing outwards from node 3, but it matches different edges – {3, 2}d and {3, 4}f rather than {3, 2}0 and {3, 4}a – so it’s actually a different event:

b ≡ {3, 2}0{3, 4}a

g ≡ {3, 2}d{3, 4}f

Similarly, event h looks like event c, in that it flips the edges pointing outwards from node 5, but again, it matches different edges – {5, 4}f and {5, 6}e rather than {5, 4}a and {5, 6}0 – so again, it’s actually a different event:

c ≡ {5, 4}a{5, 6}0

h ≡ {5, 4}f{5, 6}e

At the seventh iteration, the four events are the same as events g, e, h and d:

And at the eighth iteration, the two events are the same as events h and g:

Finally, at the ninth iteration, the only possible event is a new one, which we can label i:

Once again, event i looks like events f and a, in that it flips the edges pointing outwards from node 4, but it matches different edges – {4, 3}g and {4, 5}h rather than {4, 3}b and {4, 5}c or {4, 3}0 and {4, 5}0 – so it’s actually a different event:

a ≡ {4, 3}0{4, 5}0

f ≡ {4, 3}b{4, 5}c

i ≡ {4, 3}g{4, 5}h

And that’s it.

We’ve succeeded in reducing thirty events that looked like they were different:

to just nine events, a through i, that really are different:

Despaghettification

Now, at last, we can draw a simple causal graph for this universe.

Instead of drawing thirty events, many of them the same, and adding yellow arrows for each of these events, we can draw just nine events, all of them different, and add yellow arrows for each of these events.

Here, again, are the nine events:

a ≡ {4, 3}0{4, 5}0

b ≡ {3, 2}0{3, 4}a

c ≡ {5, 4}a{5, 6}0

d ≡ {2, 1}0{2, 3}b

e ≡ {6, 5}c{6, 7}0

f ≡ {4, 3}b{4, 5}c

g ≡ {3, 2}d{3, 4}f

h ≡ {5, 4}f{5, 6}e

i ≡ {4, 3}g{4, 5}h

Remember, the yellow arrows in the causal graph show which events have to happen before which other events can happen.

How can we tell which events have to happen before which other events can happen?

Well, it turns out that by labeling the edges and the events the way we have, we’ve made it miraculously easy.

Take event a:

a ≡ {4, 3}0{4, 5}0

Those suffixes, both 0, indicate that both the edges {4, 3}0 and {4, 5}0 matched by event a existed at the beginning of the universe.

So no events have to happen before event a can happen.

Take event b:

b ≡ {3, 2}0{3, 4}a

Again, the suffix 0 indicates that the edge {3, 2}0 matched by event b existed at the beginning of the universe, and the suffix a indicates that the other edge {3, 4}a matched by event b was created by event a.

So event a has to happen before event b can happen.

This is easy.

Take event c:

c ≡ {5, 4}a{5, 6}0

Once again, the suffix a indicates that the edge {5, 4}a matched by event c was created by event a, and the suffix 0 indicates that the other edge {5, 6}0 matched by event c existed at the beginning of the universe.

So event a has to happen before event c can happen.

Now we can start to draw a causal graph:

This captures what we know so far.

The yellow arrow on the left indicates that event a has to happen before event b can happen.

The yellow arrow on the right indicates that event a has to happen before event c can happen.

Let’s add events d, e and f:

From the suffixes of the edges matched by event d:

d ≡ {2, 1}0{2, 3}b

we can see that event b has to happen before event d can happen.

From the suffixes of the edges matched by event e:

e ≡ {6, 5}c{6, 7}0

we can see that event c has to happen before event e can happen.

And from the suffixes of the edges matched by event f:

f ≡ {4, 3}b{4, 5}c

we can see that events b and c have to happen before event f can happen.

This is really easy.

Let’s add the remaining events, g, h and i:

From the suffixes of the edges matched by event g:

g ≡ {3, 2}d{3, 4}f

we can see that events d and f have to happen before event g can happen.

From the suffixes of the edges matched by event h:

h ≡ {5, 4}f{5, 6}e

we can see that events f and e have to happen before event h can happen.

And finally, from the suffixes of the edges matched by event i:

i ≡ {4, 3}g{4, 5}h

we can see that events g and h have to happen before event i can happen.

And that’s it.

By using a simpler rule, and collapsing multiple nodes representing the same event into a single node, we’ve gone from a causal graph that looks like spaghetti:

to one that won’t make my head hurt:

Diamonds all the way down

After all that effort to simplify the causal graph, you may be wondering: so what?

We’ve applied a simple rule to a simple, one-dimensional universe to arrive at a simple causal graph.

What does this have to do with all the other, more complex rules we might apply to all the other, more complex, two- or three- or 3.37-dimensional universes we can generate in the Wolfram model?

Well, it turns out that this diamond pattern:

is more universal than you might imagine.

It turns out that all causal invariant rules give causal graphs that consist of interconnected copies of this pattern.*

So any results we see in this causal graph will be representative of results we’d see in any causal graph, as long as the rule is causal invariant.

To help us find such universal results, we can expand our simple causal graph indefinitely.

We started, remember, with this one-dimensional universe of 6 edges:

which gave us this causal graph:

But we could have started with a one-dimensional universe of 8 edges:

which would have given us this causal graph:

Or we could have started with a one-dimensional universe of 10 edges:

which would have given us this causal graph:

A universe with 30 edges gives this causal graph:

A universe with 200 edges gives this causal graph:

You get the picture.

It’s diamonds all the way down:

Space-time

Another thing that’s going to help us find universal results is that we’re looking at the causal graph for a one-dimensional universe.

When I laid out the events in our simple causal graph:

I could have placed them anywhere.

It doesn’t matter where the events are drawn in a causal graph, all that matters is which events are connected to which other events.

But I didn’t place the events just anywhere.

I laid them out horizontally to reflect where they happen in our one-dimensional universe.

When I drew the hypergraph, remember, I laid out the nodes – 1 through 7 – from left to right:

When I drew the causal graph, I laid out the events in the same way.

Events a, f and i, remember, flip the edges either side of node 4, so I drew them in the same position, horizontally, as node 4:

Events b and g flip the edges either side of node 3, so I drew them in the same position, horizontally, as node 3:

Events c and h flip the edges either side of node 5, so I drew them in the same position, horizontally, as node 5:

Finally, events d and e flip the edges either side of nodes 2 and 6, respectively, so I drew them in the same position, horizontally, as nodes 2 and 6:

In other words, I’ve carefully laid out the causal graph so that events that happen further to the left in our one-dimensional universe are shown further to the left of the causal graph, and events that happen further to the right in our one-dimensional universe are shown further to the right of the causal graph.

So we can add a space axis to our causal graph:

And that’s not all.

I’ve also carefully laid out the causal graph so that events at the beginnings of the yellow arrows are shown nearer the top of the causal graph, and events at the ends of the yellow arrows are shown nearer the bottom of the causal graph.

The yellow arrows, remember, indicate which events have to happen before which other events can happen. So events nearer the top of the causal graph happen earlier in the evolution of the universe, and events nearer the bottom of the causal graph happen later in the evolution of the universe.

So we can also add a time axis:

So now we have a simple causal graph with the events laid out in space and time:

And now we’re set.

As I say, much of the physics we’re trying to find in the causal graph – momentum, special relativity, general relativity – is about the relationship between space and time.

Now that we have a simple causal graph with the events laid out in space and time, we can find answers to some crucial questions.

What is mass/energy in Wolfram Physics?

What is momentum in Wolfram Physics?

How does special relativity emerge?

How does general relativity emerge?

How does quantum mechanics emerge?

It’s all there in the diamond pattern of our simple causal graph.

* See Stephen Wolfram’s announcement of The Wolfram Physics Project: “...because there’s causal invariance, we know something very important: this is basically just a lot of copies of the same causal graph – a simple grid”

Thanks for subscribing to The Last Theory newsletter

Check your inbox for an email to confirm your subscription

Oh no, something went wrong, and I was unable to subscribe you!

Please refresh your browser and try again