Fetching the latest data…
Fetching the latest data…
Most pictures of spacetime start with a smooth space and put events into it. Causal set theory turns that around: start with events and the order between them, and ask whether anything space-like emerges. Causal Forge is that question made playable — you draw the order, and five measurements tell you what kind of structure you actually produced. Nothing here proves anything about physics; what it does is make the difference between "looks like a space" and "measures like a space" something you can see in an afternoon.
Before you start — None. If you can read a diagram of boxes and arrows you can start. Two ideas from the student tier — the graph Laplacian and the spectral dimension — reward a second reading, and the advanced tier states every formula the code computes if you want to check it.
A node is an event and an edge is "this can influence that". There are no coordinates anywhere in the model: where you drag a node changes nothing, because every measurement reads the connections alone. That constraint is the whole point — any geometry that shows up has to come out of the ordering, since there is nowhere else for it to come from.
Do — Open the chain, press Run Sim, and read the five gauges. Then drag a node far away from the others and run again — nothing moves. Distance on screen is not distance in the model.
In a space that behaves like a space, your neighbours tend to be each other's neighbours. Triangles are the smallest form of that, and the locality score counts how many of the possible ones are actually closed. A chain has none at all, which is why it scored zero a moment ago.
Do — Open the triangle and run it. Locality is 100 and causal consistency is also 100 — a closed shape is not a closed causal loop. Now delete one edge: locality falls to 0. One edge is the whole difference.
Spectral dimension asks how fast heat spreads through the structure, and reads off how many directions it seems to have to spread into. It is a behavioural dimension rather than a counted one, which is what lets a graph with no coordinates have one at all. It also disagrees with intuition in an instructive way.
Do — Open the 6×6 lattice and run it. A grid "is" two-dimensional, yet the reading lands near 1.6 — because 20 of its 36 nodes are on the boundary, and the boundary has fewer directions to spread into. Now add long-range edges across the grid and re-run until the score reaches the 45–55 band. That band is d_s ≈ 2, and a higher number is not a better result.
The simulation steps forward with explicit Euler, which is only stable when the step size is small enough for the structure it is running on. That threshold is set by the largest eigenvalue of the Laplacian, which grows with the highest-degree node. So stability is the one score that depends on parameters you chose rather than the graph alone.
Do — Open the star and run it with Auto α on, then turn Auto α off and raise α until stability collapses. The value where it goes is the real boundary of the integrator. Add more spokes and watch the safe α shrink — the hub sets it, not the node count.
The editor lets you connect an event back to one of its own causes. It used to refuse, which sounded safer but meant causal consistency read 100 for every graph anyone could draw — a fifth of the score carrying no information. A measure of causality is meaningless if causality cannot be violated, so now the loop is allowed and the metric reports it.
Do — Open the closed loop and run it: causal consistency is 0, because every edge lies on the cycle. Reverse a single edge to break the loop and run again — it jumps to 100. That is the metric doing its job, and it is the only one you can drive to zero deliberately.
A score you cannot reproduce is not a result. When you save, the server re-runs your simulation from the graph, seed and parameters in your own bundle and recomputes every metric; if the numbers do not match, the save is refused rather than stored with a warning. That is why the seed and the parameters travel with the graph, and why nothing you publish can carry a score the platform cannot re-derive.
Do — Save an experiment, open it from your profile, and export the bundle. Re-import it and run again: identical inputs, identical output. Then try scoring 50 or better on all five metrics at once — the shapes that satisfy one measure usually cost you another.
One event. Its value is how much of the diffusing quantity starts there — think of it as how much dye you pour in at that point before the simulation runs.
Try — Drag a node far away from its neighbours and re-run. Nothing moves on the panel — distance on screen is not distance in the model.
A one-way link: this event can influence that one, and not the other way round. The arrow is the causal direction.
Try — Reverse one edge and re-run. Only causal consistency can react — that tells you exactly which part of the score is about causality and which part is about shape.
How strongly two events are coupled. A heavier edge lets the quantity flow faster between its endpoints.
Try — Raise one weight sharply with Auto α off, then re-run. Stability falls without you touching α — the safe step size depends on the weights, not just the wiring.
Turns one event into two that share its value and its connections. A way to make the structure finer without changing what it is connected to.
Try — Split a hub node and watch locality move. Refinement changes the triangle count, so a structure that was "the same idea" scores differently — worth knowing before you trust a locality reading.
Collapses two events into one, adding their values and joining their connections. Useful for asking whether the big picture survives when you stop resolving fine detail.
Try — Merge two nodes and compare the metrics before and after. A reading that survives coarse-graining is a much stronger result than one that does not — that comparison is the closest thing this module has to a physics argument.
You are allowed to connect an event back to one of its own causes. The simulation will still run — and causal consistency will fall, because an event has become its own ancestor.
Try — Close a loop on purpose and watch causal consistency drop. It is the only metric you can drive to zero deliberately, and doing it once is the fastest way to see what the score is actually measuring.
Causes come before effects. If you can follow the arrows and end up back where you started, something is wrong: an event would be its own ancestor. This score is the share of your arrows that are not caught in such a loop.
Try — Close a loop deliberately — connect a downstream node back to an upstream one — and watch this fall. It is the only metric you can drive to zero on purpose.
Space feels local: your neighbours' neighbours tend to be your neighbours too. This score is high when the nodes around any given node are also connected to each other, forming tight local patches rather than long thin chains.
Try — Build a triangle, then stretch it into a chain by deleting one edge. Locality collapses from 100 to 0 with a single edge, which is what makes it a sharp signal rather than a gentle one.
Imagine a drop of dye spreading through your graph. How fast it spreads tells you how many directions there are to spread into — roughly, how many dimensions the graph behaves like. A line behaves one-dimensional, a grid two-dimensional.
Try — Aim for the 45–55 band, not the maximum. That band is d_s ≈ 2 — surface-like — and is what the Surface Walker challenge asks for. A higher number here is not a better result.
Run the simulation long enough and values should settle down, not blow up or flip-flop. This score says how safely the diffusion behaves on your graph at the step size you chose.
Try — Turn Auto α off and raise α until this drops. The value where it collapses is the numerical stability boundary — you are measuring a real property of the integrator, not a scoring rule.
Is your graph shaped like one of the obvious textbook patterns — a line, a star, a ring, a fully-connected blob — or like something else? This scores how unlike the standard shapes it is.
Try — Push this above 50 while keeping locality above 50. Novelty on its own is easy — novelty that survives the other metrics is the interesting result.
A real space curves the same way wherever you stand in it. This scores how evenly the bending is spread across your graph — not how much it bends, but how consistently.
Try — Build a star and read this beside locality: 100 here, 0 there. One metric alone will always be gameable — the reason there are eight is that the combination is not.
How much of your structure repeats itself. If two events have the same pattern of causes and effects around them, and the same is true of their neighbours, and so on, they are interchangeable — this scores how many of your events are interchangeable with some other.
Try — Close a path into a ring and watch this jump to 100 — every event now has exactly one cause and one effect. Then reverse a single edge: two nodes acquire a second cause, and the symmetry collapses.
Squint at your graph — merge every event with a neighbour so the whole thing is half the size — and see whether it still measures the same. Something that only shows up at one level of detail was never really there.
Try — Score a lattice, then a two-node graph. The lattice still looks like a lattice one level coarser; the pair loses its only structure entirely. That gap is the metric.
The seed picks which random starting nudge the simulation gets. The same seed always gives the same run — that is the whole point of having one. It does nothing while Noise is 0.
Try — Set Noise to 0.5, run, then change only the seed and run again. The trajectory differs; every metric holds still. That gap is worth understanding before you trust any of the scores.
How big a step the simulation takes each tick. Small steps are slow but safe; take steps that are too big and the values start swinging wildly instead of settling.
Try — Turn Auto α off and raise α until the Stability gauge collapses. The value where it goes is the real stability boundary of the integrator, not a scoring cutoff.
How many ticks to run. More steps means the values get closer to settling down; it does not change what they settle to.
Try — Push α just past its stable value and then raise Steps. Watching a divergence grow is a clearer lesson about explicit integrators than any number on the panel.
How hard the seed nudges the starting values. At 0 — the default — every node starts exactly where you put it and the seed is inert. Turn it up and the seed starts to matter.
Try — Leave it at 0 unless you are deliberately exploring initial conditions. It is the switch that turns the seed on, not a difficulty setting.
Picks a step size that is safe for the graph you have built, instead of making you find one by hand. Convenient, and it keeps the Stability gauge honest rather than high.
Try — Build a star graph, enable Auto α, then add spokes. The chosen α shrinks as the hub degree grows — the safe step size is a property of the graph, not a constant.
Surfacing sources you can verify is a deliberate anti-pseudoscience measure, not a bibliography. Nothing on this page asks to be taken on trust.
Glossary — every term used above, defined once.