Chapter 4 · Section 4
The Expansion of the Physical Universe
The BPT law
BPT Part 3.11 (The Expansion of the Physical Universe) gives the physical universe its growth from the Physical Nova on. The Matter-Era Expansion, a = (t / t⊚)^(2/3): "a universe of matter grows as time to the two-thirds: fast at first, then slowing", with Hubble rate H = 2/(3t). Matter Dilution, ρ = ρ⊚ · a^(−3): matter "is neither made nor lost by the expansion; it is spread". Hubble Drag, v⇝ = v⇝⊚ · a⊚ / a: "motion through space dies away as space grows", while bound systems keep their fast internal motions. Linear Growth of Structure (G), δ = δ⊚ · a / a⊚: small excesses grow in step with the universe until they collapse. The start is the Pin Head Scale, a↯ = R⊛ / R⊚, the Pulsecore's radius against the universe's at its final well: "at the Physical Nova the universe is the size of its Pulsecore", about 10⁻⁶¹ for ours.
BPT Part 3.13 adds the Null Vacuum and its Level Λ Law, Λℓ_P² = 3π / (16 ln 2 · 4^L), so that in each universe's own life of 2^L Tempos Λc²T² = 3π/(16 ln 2), the same at every level. Part 3.11's Game's Reading puts the two together as the law the game runs: "a ∝ sinh^(2/3)(x), x = K · (t + t₀) / T_life, the flat law of matter and vacuum together", K = (3/2)·√(π/(16 ln 2)) ≈ 0.80 at every level, t₀ putting a at the Pulsecore's size at t = 0, the vacuum's share tanh²(x) reaching about 0.44 at the final well; and "the expansion does not stop at the final well". The same Part's Radiation Cooling, T_γ = T_γr · a_r / a, and Primordial Wave Stretch, λ_w = λ_w0 · a / a₀, say how the first light and the first gravitational waves stretch with the space, and the book describes the game drawing both.
Neither the book's law nor the code has a radiation era, a ∝ t^(1/2): the first light is drawn cooling as the space grows, but it does not drive the expansion. expansionA() is the flat matter-plus-Λ law from the first instant.
The established physics
- The flat universe of matter and a cosmological constant: a ∝ sinh^(2/3)((3/2)·√(Λc²/3)·t), t^(2/3) early, exponential late; the vacuum's share Ω_Λ = tanh² of the same argument (standard ΛCDM, e.g. Peebles 1993).
- Hubble drag: peculiar momentum falls as 1/a (Peebles 1980).
The game's math
expansionA() app.js:710:
pin = max(10⁻³, HOLE / (HOLE + 2·TUBE)) the torus's hole against its full width: the pin head
t₀ = physLife · pin^1.5 the time at which a matter-era law would be at the pin head
t = flips since the Physical Nova (pulseCounter + subDone − physStart)
lifeFlips= max(1, 2 · rupturePulses)
a(t) = [ sinh(K·(t + t₀)/lifeFlips) / sinh(K·(physLife + t₀)/lifeFlips) ]^(2/3)
K = VACUUM_K = 1.5 · √(π / (16 ln 2)) ≈ 0.798 (app.js:722)
a = 1 at the final well (t = physLife) and keeps growing through the decay (2026-10-28 ruling, BPT Part 3.10). The vacuum's share, vacuumShare() app.js:725, is tanh²(K(t + t₀)/lifeFlips): 0 at the big bang, tanh²(0.80) ≈ 0.44 at the final well.
In Matter.step() matter.js:389–391, with a₀ = 1 set by sendOutMatter() (app.js:1243):
if a grew since the last step: v ← v · (a_prev / a)² for every body and well
gk = (a₀ / a)³ multiplies every gravitational pull
The cells are comoving: the grid keeps its count as the torus grows. A peculiar velocity in cells a flip falls as 1/a², which is BPT's Hubble Drag in comoving units: momentum falls as 1/a, and each cell is a times longer. Gravity across the grid falls as a⁻³, BPT's Matter Dilution: the same mass, a times farther in every direction. Bound orbits keep their turn; motion across space dies down (comment matter.js:383–388, ruling 2026-10-26: "they are moving across the torus too fast still").
Worked case, desktop at level 6 or deeper: physLife = 128 flips, lifeFlips = 128. At t = 64 flips (half the life), ignoring the small t₀, a = [sinh(0.399)/sinh(0.798)]^(2/3) = [0.410/0.885]^(2/3) ≈ 0.60; gk ≈ 1/0.60³ ≈ 4.6. Pure matter-era t^(2/3) would give 0.63: the vacuum makes the late growth faster, so a is smaller at half-life.
In the game
The expansion is the most visible law in a run. It is drawn in 3D, from the end of the Data Nova to the final well:
- Drawing in. From the Data Nova to the Physical Nova the torus shrinks toward the Pulsecore's size, faster as the nova nears (
setPinhead()scene3d.js:345, driven at app.js:1301–1302). When it is most of the way down a toast reads "drawing in: The scaffold and all its data draw in toward the pin head, the Pulsecore's own size · the Physical Nova is near" (app.js:1304), and the HUD's epoch line reads "Universe · the scaffold draws in toward the pin head". - The burst. At the Physical Nova the torus grows back out from the pin head over about three seconds of drawn time (scene3d.js:2007), the stars riding it out, and from then on its drawn size is the scale factor itself,
s = max(pin head, a)(scene3d.js:2006). The empty shell of the space layer stays in view round the smaller physical torus while it is under 97 % of full size (scene3d.js:2012). - The first light and the first waves. From the Physical Nova the whole skin glows at once, white-hot, cooling through yellow, orange and red to dark as a grows, by a color ramp in log a that stands in for T ∝ 1/a, dark by about a third of full size; over it run the crests of three plane gravitational waves with a whole number of crests round the torus (24), so they stretch exactly with the space (scene3d.js:2153–2166, shader at scene3d.js:871–873).
- The darkening vacuum. Once there are stars the skin sits at 62 % brightness and dims as the Null Vacuum's share grows,
0.62 · max(0.3, 1 − 1.2·Ω⦵)(scene3d.js:2024), "so I can more clearly see the stars in the foreground" (Josh, 2026-10-27, quoted at scene3d.js:2020–2021). - The HUD. The epoch line reads "Universe · expanding, N% of its final size · …" with N = 100·a (app.js:2148).
- Three toasts mark the growth (app.js:670–673): at a = 0.25, "a quarter grown: The universe is a quarter of its final size · the ripples are growing: the first clumps gather along the lattice's lines"; at 0.5, "half grown: Half its final size · filaments are forming along the scaffold, stars igniting in them"; at 0.9, "the web stands: Nearly full size · the cosmic web stands on the scaffold: clusters where filaments cross, voids between".
- Hubble drag shows in the motion: the first fast drift of matter across the torus dies down as it grows, while the stars round each clump keep swirling.
The run's saved record keeps the scale factor reached as a (app.js:2206). No control changes the expansion.
The scale model
Exact in its shape: the same law in every universe's own life, so the curve a(t/T) is the same at every level. The life itself is the scale model's 2^Lm Tempos. The pin head is the drawn torus's own hole, TORUS.HOLE / (HOLE + 2·TUBE), not the true a↯ ≈ 10⁻⁶¹ of BPT Part 3.11; the floor of 10⁻³ keeps the start finite.
Where the game and the theory differ
- The drawn torus stops at full size. BPT says the expansion "does not stop at the final well", and
expansionA()goes on past 1 through the decay, with the matter's Hubble drag and dilution following it. The scene clamps the value it is given to at most 1 (setExpansion()scene3d.js:349), so after the final well the drawn torus stays at its full size. - The start is a little smaller than the pin head. BPT's Game's Reading has t₀ put a at the Pulsecore's size at t = 0. The code takes t₀ = physLife·pin^1.5, the inverse of the matter-era law a ∝ t^(2/3), not of the sinh law it runs. Since sinh x ≈ x early on this is close: with physLife = lifeFlips, as in the worked case, a(0) = [K·pin^1.5 / sinh K]^(2/3) = pin·(0.798/0.885)^(2/3) ≈ 0.93·pin, so the universe starts at about 93 % of the drawn pin head.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 1.5, π/(16 ln 2) | VACUUM_K app.js:722 |
K = (3/2)√(Λc²T²/3) with Λc²T² = 3π/(16 ln 2) | BPT (Part 3.13, Level Λ Law) |
| 2/3 | expansionA() app.js:720 |
Exponent of the sinh law | PHYSICS (flat matter + Λ Friedmann solution) |
| 10⁻³ | expansionA() app.js:712, vacuumShare() app.js:727, sendOutMatter() app.js:1226 |
Floor on the pin head | METHOD (keeps t₀ > 0) |
| 1.5 | expansionA() app.js:712 |
t₀ = physLife·pin^1.5, inverse of a ∝ t^(2/3) | PHYSICS (Einstein–de Sitter), used as an approximation |
| 2 (×) | expansionA() app.js:718 |
Flips per Tempo in lifeFlips | BPT (Part 1.10) |
| 1 | expansionA() app.js:711 |
a = 1 before the Physical Nova | METHOD |
| 2 (power) | Matter.step() matter.js:390 |
Peculiar velocity falls as (a_prev/a)² in comoving cells | PHYSICS (Hubble drag, Peebles 1980) |
| 3 (power) | Matter.step() matter.js:391 |
Gravity across comoving cells falls as a⁻³ | PHYSICS (matter dilution) |
| 1 | sendOutMatter() app.js:1243 |
a₀ = 1 | METHOD (reference) |
| 0.25, 0.5, 0.9 | stepMatterPost() app.js:671–673 |
Scale factors at which a message is shown | DISPLAY |