Interactive mathematics
Change the parts.
See what survives.
Rebuild an operation. Refine a signal. Find what a summary loses.
Go deeper with a four-level Haar signal experiment.
Open Signal Laboratory · Compare 16–256 samples, three representations, noise, and coefficient budgets.
Open J-Space Laboratory · Edit saved neural agents, trace their messages, and test what persists.
01 / Operator packets
The whole operation, in four pieces.
Each block carries one input coordinate to one output coordinate. Keep all four to rebuild the matrix operation.
The diagram appears when JavaScript is available. The worked calculation is linked below.
All four blocks retained. The operation is reconstructed.
Tap a connection or transfer row to keep or omit its block, or use the checkboxes. Each contribution is T[row, column] × x[column]. Dashed marks indicate omitted blocks.
Why does reconstruction work?
The coordinate projectors P₁ and P₂ add to the identity. Consequently, the sum of all four blocks PⱼTPᵢ is (P₁ + P₂)T(P₁ + P₂) = T for every vector. Omitting a block changes the retained operator whenever that block is nonzero; a particular input may still give the same output.
Continue to the hand calculation, operator identity, and Paper I source links.
Read the packet reconstruction explanation Open the Python example02 / Signal refinement
More parts. The same signal.
Separate eight samples by their original addresses. Finer packets preserve every value; discarding a packet can leave a residual.
Changing resolution restores all packets.
The diagram appears when JavaScript is available. The worked calculation is linked below.
Tap a sample in any row to keep or discard its entire address packet, or use the checkboxes below.
All packets retained. Every sample is recovered.
Inspect the values and original addresses
| Address | Original | Rebuilt | Residual |
|---|
What changes when the packets get finer?
Addresses start at zero. With four packets, packet r holds addresses congruent to r modulo four. The even packet splits into packets 0 and 2; the odd packet splits into packets 1 and 3. With eight packets, each of those splits again. Returning each sample to its address reconstructs the signal. Here, a discarded sample is replaced by zero, and the residual is original minus rebuilt.
Continue to the address calculation and Paper II refinement sources.
Read the signal refinement explanation Open the Python example03 / Information and recovery
One summary. Two possible inputs.
The summary keeps only x₁ + x₂. Move along the line to see which questions still have a unique answer.
Go deeper in Recovery Laboratory · Edit multiple measurements and questions, inspect exact certificates, and repair missing information.
For a custom question F(x) = ax₁ + bx₂, change a and b below.
The diagram appears when JavaScript is available. The worked calculation is linked below.
Drag u along the line, or use the position slider. Coordinates snap to whole numbers from −4 to 4 for x₁; the sum stays fixed.
Same summary, different answers. The first coordinate cannot be recovered from the sum alone.
The summary erases the direction (1, −1), but the requested answer changes along it.
When is recovery possible?
For R(x) = x₁ + x₂ and F(x) = ax₁ + bx₂ on the real plane, exact recovery from R for every input is possible exactly when a = b. Then F(x) = aR(x) and the recovery rule is G(s) = as. Otherwise, u and v above have equal sums but answers differing by a − b. No function of the sum alone can give both answers, even if that function is nonlinear.
Continue to the collision argument, Paper III, and Realization Boundaries.
Read the recovery explanation Open the Python example04 / Multilevel Haar decomposition
Keep the structure. Choose the detail.
Analyze a 16-sample signal through four levels of averages and differences. Select its coefficients, then reconstruct the signal and account for the loss.
Edit any sample below. Addresses run from 0 to 15; values are whole numbers from −16 to 16.
Moving the cutoff selects details with |coefficient| ≥ cutoff. You can then override that selection using the coefficient checkboxes. The global mean is always kept.
Selection: all coefficients.
The diagram appears when JavaScript is available. The worked calculation is linked below.
Choose a coefficient to highlight its support and plot its contribution if kept.
All 16 coefficients retained. Every sample is recovered exactly.
A detail changes the two halves of its support in opposite directions. Toggle a coefficient to see its contribution.
Inspect samples, intermediate averages, and the energy balance
Original energy = reconstructed energy + residual energy
= +
The averaging normalization needs weights: the mean has weight 16 and a level-j detail has weight 2ʲ. Unweighted coefficient squares do not equal signal energy.
| Level | Averages | Details |
|---|
| Address | Original | Reconstructed | Residual |
|---|
How do four levels reconstruct the signal?
For each pair (u, v), store its average a = (u + v)/2 and detail d = (u − v)/2. Repeat on the averages until one global mean remains. This gives 1 mean and 1 + 2 + 4 + 8 details. Invert one level with u = a + d and v = a − d, then repeat toward the samples. An unchecked detail is replaced by zero. The synthesis vectors are mutually orthogonal; accounting for their weights gives the displayed energy balance.
All arithmetic here uses bounded integers and fractions with power-of-two denominators. The displayed coefficients and reconstruction errors are exact.
Build on the Haar-pair worked example, then follow its Paper V and Information Realization source links.
Read the multilevel calculation Start with the four-sample exampleThese experiments use bounded integer inputs, with exact power-of-two fractions in the Haar lab. The linked explanations give the arguments, sources, and recorded proof coverage.