RealityModels

Multiverse with convergences

Interactive simulation of a multiverse in which the branches produced by quantum measurements can reconverge instead of only forming a tree. It has no dependencies and works offline.

Open it by double-clicking simulations/quantum-mechanics/many-worlds/index.html (or from any static server); nothing to install. Theory and references: many-worlds-convergence-theory.en.md; Italian version: many-worlds-simulation-guide.it.md.

Idea

In the many-worlds interpretation every measurement with N outcomes splits every world into N branches, and after t measurements the tree has N^t worlds. Here a world is described only by its record k, the sum of the outcomes (each outcome is worth 0..Nโˆ’1). Two branches that reach the same k at the same step are the same world and converge, so the structure becomes a lattice with (Nโˆ’1)ยทt+1 nodes at step t.

The record is drawn as x = 2k โˆ’ (Nโˆ’1)ยทt, centred on zero (for N=2 it changes by ยฑ1 at every measurement, as in a random walk).

The three regimes

RegimeWhat it shows
TreeNaive counting: every measurement splits every world, N^t distinct worlds, all with probability N^โˆ’t. Hovering a world highlights its history (outcomes) and the worlds with the same record, the ones the other regimes would merge. At most 4096 worlds are drawn (T โ‰ค 12 for N=2, 7 for N=3, 6 for N=4).
Classical convergenceWorlds with the same record merge and their probabilities add: p(k) = (outcome sequences giving k) / N^t. The distribution is a bell of width ฯƒ โˆ โˆšt.
Quantum convergenceWorlds with the same record merge and their amplitudes add, so they interfere. Some branches cancel (dashed), some worlds are left with zero probability (empty circles) and the distribution spreads as t, faster than in the classical case.

The lattice is computed once for all regimes; the regime only decides what to draw.

Model

The quantum regime is a coined quantum walk on the record k, exactly unitary.

Component c of node k+c comes only from node k. The amplitudes of converging branches therefore sit in different components and interfere at the coin of the next step. The sum of the probabilities stays 1 at every step.

The phase disorder D โˆˆ [0, 1] rotates every node by a random phase

|ฯ†| โ‰ค ฯ€ยทD before the coin (seeded generator, reproducible). The evolution stays unitary. With large D the interference becomes incoherent and the spreading turns diffusive again (ฯƒ โˆ โˆšt), as in the classical regime.

In the classical case the flow along each branch is p(k)/N and the probabilities add.

Parameters and query string

ParameterQueryRangeDefault
Outcomes per measurement Nn2โ€“42
Measurements TT1โ€“40 (tree: see limit above)20
Regimeregtree, classical, quantumquantum
Phase disorder Ddis0โ€“10
Random seedseed0โ€“999991
Displayed measurement tstep0โ€“TT
Viewviewgraph, tablegraph
Languagelangit, enbrowser

Example: index.html?n=2&T=30&reg=quantum&step=30.

Language and theme (System, Light, Dark) are set with the gear button at the top right. They are saved in the browser and apply to the other simulations too.

Readings

They all refer to the displayed step t.

Classical and quantum readings appear in every regime, so they can be compared.

Graph legend

Structure

simulations/quantum-mechanics/many-worlds/
โ”œโ”€โ”€ index.html      page and control panel
โ”œโ”€โ”€ css/style.css   theme tokens (light, dark, system) and responsive layout
โ”œโ”€โ”€ js/i18n.js      it/en dictionaries and translation functions
โ”œโ”€โ”€ js/model.js     lattice, quantum walk, statistics (also usable from Node)
โ”œโ”€โ”€ js/graph.js     Canvas renderer, tooltip, histogram
โ””โ”€โ”€ js/app.js       controls, query string, animation

The settings button (language and theme) is shared by all simulations and lives in simulations/shared/ (js/settings.js, css/settings.css).

Simplifications

Verification

cd simulations/quantum-mechanics/many-worlds && node -e 'const M=require("./js/model.js"); const I=require("./js/i18n.js").I18n; const L=M.buildLattice({outcomes:2,steps:3}); console.log(L[3].map(n=>n.pQuantum.toFixed(3)).join(" "), I.check().length)'

Expected: 0.125 0.625 0.125 0.125 0 (known distribution of the Hadamard walk at t=3 and no missing keys in the dictionaries).