Proofs
Demonstrations, not descriptions — drag a theorem until it won't break, then read the proof that says it never can. The worked, ordered chains live next door on Derivations. ⌘K to jump anywhere.
Limits & series
Where analysis gets honest: the ε that pins a limit, the ε-tube that lifts it to whole curves, a function's polynomial twin, and the tests that decide a series settles.
ε, made concrete
The most hand-waved move in analysis, made playable: give it a tolerance and get the threshold. The whole definition of a limit in one slider.
Give it a tolerance ε — any width of the amber band — and it hands you a threshold N past which the sequence never leaves it (green points are inside the band; grey ones, before N, are still escaping). Shrink ε and N marches right; that march is the entire meaning of aₙ → L. “Chasing epsilons” is just this game, played in symbols. Here aₙ = 1 + sin(2n)/(n+2).
Uniform convergence — the whole graph at once
Lift the ε from points to whole curves: a function-space neighborhood is an ε-tube, and uniform convergence asks the entire graph to fit inside it. Five cases, animated — the ones that tuck neatly in, the ones that always poke out somewhere, and the payoff (a uniform limit of continuous functions is continuous). Pick one and watch it run.
The amplitude is , so : the entire wave shrinks into the -tube. Uniform.
Taylor series — a function's polynomial twin, and how far it stays faithful
Read a function's derivatives at one point, stack them on , and the polynomials Pₙ climb toward the function. Watch each one build — coefficients in fractions — and see how far the twin stays faithful (its radius of convergence), then the remainder proof of why it does.
. The polynomials climb to it on the whole line.
Now drive it yourself. Drag the degree and the center a: the gold polynomial swallows the sine near a and the gap that's left is exactly the Lagrange remainder — the same bound the proof above puts a ceiling on. Watch it shrink as the degree climbs.
The gold polynomial hugs the curve near a and peels away past it — add a degree and the good region widens. The leftover between the two curves is exactly the remainder Rn; since every derivative of sine is at most 1, it can never exceed |x−a|ⁿ⁺¹/(n+1)! — the Lagrange bound shown above, made visible. That bound going to zero is why the series above stays faithful.
Tests of convergence — the whole toolkit, animated
A power series is only as good as where it converges — so before Taylor's twin is trustworthy, you need to know a series settles. Here is the full battery, one animation each: a sequence's ε–N definition, every standard series test (what it looks at and what it decides), and the radius & interval of convergence. Pick one and watch it run — rendered with Manim.
Past some index N, every term sits inside the ε-band around L. That is what convergence means.
Theorems you can move
The workhorses of analysis, made draggable: a value must be hit (IVT), a slope must be matched (MVT), and the best function found, not the best point. Drag each until it won't break, then read why it can't.
Intermediate Value Theorem — a value must be hit
Slide the level line: wherever it sits between f(a) and f(b), a continuous graph has to cross it, so a solution x★ must exist.
The Intermediate Value Theorem, live. Slide the level line y = k: whenever it sits inside the bracket [f(a), f(b)], a continuous graph cannot get from one end to the other without crossing it — so a solution x★ with f(x★) = k must exist. Here f(x) = sin x + 0.35x on [a, b]; continuity is the whole hypothesis (a jump would let the graph skip k).
Mean Value Theorem — a slope must be matched
Drag the endpoints a and b; somewhere inside, the tangent at x★ matches the chord. Then read why it can never fail.
The Mean Value Theorem, live. Drag the endpoints a and b: the green tangent at c = x★ is always parallel to the amber secant — somewhere inside the interval your instantaneous slope equals your average slope. Here f(x) = sin x + 0.3x; the proof below is why it can never fail.
Iterate the MVT and Taylor's theorem falls out — that chain, in both Prove and Memorize views, is on Derivations.
Intermediate Value Theorem
AnalysisThe real line has no gaps. A continuous path from below the target to above it cannot skip the target — completeness forbids the jump.
- Assume f(a) < y < f(b) (the other case is symmetric). Collect the inputs that stay below the target:
- S is nonempty (it holds a) and bounded above (by b), so by the completeness of ℝ it has a least upper bound c = sup S.
- Continuity pins f(c) from both sides: points just left of c lie in S, so f < y and f(c) ≤ y in the limit; points just right are not in S, so f ≥ y and f(c) ≥ y.
- Both inequalities force f(c) = y. ∎
Mean Value Theorem
CalculusSomewhere your instantaneous speed equals your average speed. Tilt the picture until the secant lies flat, then find the flat tangent.
- Subtract the secant line to flatten it:
- Then g(a)=g(b)=0, and g keeps f's continuity and differentiability.
- Rolle's theorem (an interior extremum has zero derivative) gives a c with g'(c)=0.
- But , so hands you the theorem at once:
Uniform limit theorem
AnalysisUniform convergence lets you swap two limits. If the entire graph of f_n sits within ε of f — a neighborhood in the sup-metric — then continuity transfers to the limit by a three-ε triangle: one leg for each jump.
- Fix a point x and ε > 0. Uniform convergence hands you a single N that works everywhere at once — the whole graph inside the tube:
- f_N is continuous at x, so some δ controls it locally:
- Route from f to f through f_N with the triangle inequality:
- So f is continuous at x. Read it backwards: on converges to a function that jumps at 1, so that convergence cannot be uniform — the knee in the demo is the obstruction. ∎
The Gamma function
Special functionsThe factorial, freed from the integers. One integration by parts turns the integral into its own recurrence.
- Integrate by parts — differentiate the power , integrate the exponential :
- The boundary term vanishes ( outruns any power), leaving the recurrence .
- Since , induction gives — the factorial extended to all of except
Generating functions
CombinatoricsHang an entire sequence on one power series, do algebra on the series, then read the coefficients back off. A clothesline for numbers.
- Take Fibonacci: F₀=0, F₁=1, Fₙ=Fₙ₋₁+Fₙ₋₂. Let F(x)=Σ Fₙxⁿ and feed the recurrence in.
- The recurrence collapses to a single algebraic equation, then solves:
- Partial fractions over the golden ratio φ recover Binet's closed form — the whole sequence was inside the function all along.
Fourier series
AnalysisThe complex exponentials are an orthonormal basis of L². A function is just its coordinates in that basis — and each coordinate is an inner product.
- Orthonormality is a single integral — for integers :
- So projecting f onto reads off the coefficient, . Completeness of the system (Stone–Weierstrass) means these projections rebuild f in the L² sense.
- Energy is conserved — Parseval makes the change of basis an isometry:
Cyclic groups
AlgebraOne generator's powers are so rigid that any subgroup is forced to be generated by a single element of its own.
- Let with . Every element of is for some ; let be the smallest positive such exponent appearing in .
- Claim . Take any and divide the exponent with remainder: with (the division algorithm).
- Then . Minimality of forces , so and :
Calculus of variations — Euler–Lagrange
AnalysisCalculus finds the best point; the calculus of variations finds the best function. Perturb the path and demand the first-order change vanish.
- Perturb y by a small admissible bump: y → y + εη with η(a)=η(b)=0. Set Φ(ε)=J[y+εη].
- A minimizing y forces Φ′(0)=0. Differentiate under the integral and integrate the y′ term by parts (the boundary term dies since η vanishes at the ends):
- Because this holds for every bump η, the fundamental lemma of the calculus of variations forces the bracket to vanish — the Euler–Lagrange equation. ∎
The Gaussian integral
Difficult integralsA single integral defeats every elementary antiderivative — yet its square, read in polar coordinates, falls apart in one line. Square the hard thing to make it easy.
- There is no elementary antiderivative, so attack the square instead — a product of two copies becomes one double integral over the plane:
- Switch to polar coordinates — the change of basis the rotational symmetry was begging for (x²+y²=r², dA = r dr dθ):
- Now the radial integral is elementary (substitute ): . Times gives , hence :
Each card links to its live visual where one exists — Γ in the distribution foundry, generating functions and Fourier in their deep dives, cyclic groups in the Compute lab.
Calculus of variations — the best function, not the best point
Perturb a path between fixed endpoints and watch the functional: the arc-length minimum is the straight line, where the first variation vanishes.
Calculus finds the best point; the calculus of variations finds the best function. Fix the endpoints, add a bump A·η that vanishes at both ends, and watch the trial path pull away from the straight line. The functional J(A) — arc length here — bottoms out at A=0: any perturbation only lengthens it. That the first variation vanishes for every admissible bump is exactly the Euler–Lagrange equation. An original demonstration — the proof is in the gallery below.
How a model computes
The moves under real modelling — descent that learns, the geometry that makes the Gaussian, likelihood vs probability, an honest heuristic, and the everyday wrangling of data — each one you can drive.
Gradient descent — how a model actually learns
Read the slope, step the other way, repeat — the algorithm every model is trained by. The only knob is the learning rate: watch it crawl, glide, zig-zag, then diverge.
The slope points uphill, so you step the other way — that's the whole algorithm. The only knob is the learning rate: nudge it up and the crawl speeds into a clean glide, up more and it starts zig-zagging across the minimum, and past a threshold each step overshoots farther than the last and it diverges. Every model you'll train lives somewhere on that dial.
Before the Gaussian integral — change of variables, and the n-sphere
Draw a bell curve in enough dimensions and it stops being a blob and becomes a sphere. Raise the dimension and watch 320 Gaussians collapse onto a thin shell — the same surface-area factor that turns into .
Here is the surprise: a Gaussian is densest at its center — the single likeliest point is the origin. So why does the cloud avoid it? Because the chance of landing at length r is the density times how much room sits at that length — and the room at radius r is the surface of a sphere, . The bell pulls inward, the shell pushes outward, and they balance on a thin skin at √n. In 1D the bell wins and you sit near 0; by n = 120 the shell wins so completely that every draw lands within a few percent of the same radius.
That balancing factor is exactly the surface area of the n-sphere, — the same change of variables that turns into at n = 2 (Izenman, Modern Multivariate Statistical Techniques, Prob. 2.4). So the Gamma normaliser, the Gaussian integral, and concentration of measure are one fact: sample that high-dimensional Gaussian and its persistent homology reads a sphere — the modular-forms-and-TDA crossover. See Γ built three ways in the distribution foundry.
Anatomy of a Gaussian — color-coded
Three parameters, three jobs — and the Gaussian integral hiding in the normalizer. Each control is colored to match its part of the formula.
- Probability space — the shaded area over an interval is a probability; slide k and read the 68 / 95 / 99.7 rule off ±1, 2, 3 σ.
- Likelihood space — fix an observation and read the height as the mean moves instead: that's the likelihood, area vs height.
- √π space — turn on density and the height is no longer free: A = 1/(σ√2π), forced so the total area is exactly 1 — that √2π is the Gaussian integral (√π, rescaled) doing its one job.
Probability vs likelihood — area vs height
The same Gaussian, read two ways: slide an interval for a probability, slide the mean for a likelihood.
It is the same surface , sliced two ways. Probability fixes the parameters and varies the data — a normalized distribution whose area over a region is the probability. Likelihood fixes the observed data and varies the parameter — the height at read across hypotheses, peaking at the MLE but never enclosing area 1. Bayes is the machine that turns that height into a probability over : multiply by a prior and divide by the evidence — the area that renormalizes it. .
The traveling salesman — heuristics, honestly
An NP-hard problem you can't brute-force — so you reach for heuristics that are fast and good-enough, never guaranteed optimal. Watch 2-opt uncross the greedy tour.
Nearest-neighbor (faint) greedily hops to the closest unvisited city and leaves crossings; 2-opt (solid) uncrosses edge pairs until no swap helps — trimming the tour by ~6% here, with no optimality guarantee.
Deciding under moral uncertainty — the trolley problem
Optimization meets ethics. Unsure which moral theory is right? Decision theory still has something to say — and it's honest about staying a framework, not an answer.
The same five are ahead, but there is no spur — only a large stranger standing beside you on a footbridge over the track. Shoving them off would stop the trolley and save the five, but now their death is the means, not a side effect.
Only outcomes count — maximize lives saved minus lives lost. If the numbers favor acting, act; the ends carry the weight.
Some acts are wrong in themselves — using a person merely as a means, or killing by your own hand — however good the result. Duties, not totals.
Asks what a person of good character would do, or what rules no one could reasonably reject — a middle path that still recoils at coldly using people.
Score each option under each theory, weight by your credence, compare expected values. The switch and the footbridge share the same arithmetic (1 vs 5) yet pull apart the instant a death becomes the means rather than a side effect — slide a single credence to 100% and watch the recommendation flip.
The data-wrangling bench — one pipeline, in clicks, pandas, and SQL
The everyday move of working with data: filter → group → aggregate → sort. Drive it on a tiny table and watch the pandas and the SQL rewrite themselves alongside the result — the tools differ, the moves don't.
| region | n | revenue | units | avg rev |
|---|---|---|---|---|
| East | 3 | 34 | $970 | $323 |
| West | 3 | 35 | $955 | $318 |
| North | 3 | 29 | $735 | $245 |
| South | 3 | 20 | $595 | $198 |
df
.groupby("region")
.agg(revenue=("revenue", "sum"))
.sort_values("revenue", ascending=False)SELECT region, SUM(revenue) AS revenue FROM orders GROUP BY region ORDER BY revenue DESC
One pipeline — filter → group → aggregate → sort — three ways to say it: the clicks above, the pandas, and the SQL. Change any control and all three move together. That correspondence is the whole feel of working with data; the tools differ, the moves don't.
The SQL toothpaste tube — how a query really runs
SQL is written SELECT-first but runs FROM-first: rows get squeezed through the clauses in logical order, narrowing at each stage. Step through and watch the data shrink — the formulation, not the answer, is the work.
5SELECT region, SUM(amount) AS total1FROM sales2WHERE amount > 1003GROUP BY region4HAVING SUM(amount) > 5006ORDER BY total DESC7LIMIT 2
| region | product | amount |
|---|---|---|
| East | Widgets | 120 |
| East | Gadgets | 300 |
| West | Widgets | 90 |
| West | Gadgets | 250 |
| North | Widgets | 400 |
| North | Gadgets | 150 |
| East | Gizmos | 80 |
| West | Gizmos | 260 |
| South | Widgets | 280 |
| South | Gadgets | 250 |
Read every row of the table — 10 rows enter the tube.
Written SELECT-first, run FROM-first. The engine reads the table, filters rows (WHERE), folds them into groups (GROUP BY), filters the groups (HAVING), and only then computes what you asked to SELECT — before sorting and trimming. Learn the squeeze order and you stop guessing why a query breaks. It's the same move data science lives on: the answer is downstream, but the formulation — asking the question in the right order — is the work. “The mere formulation of a problem is far more essential than its solution” (Einstein).
The Datasaurus — always plot your data
Every cloud here has the same mean, standard deviation, and correlation — to the decimal — yet looks nothing alike. Summary statistics agree perfectly while the shape morphs from a dinosaur to a star: the case for always plotting your data. (Built with Manim; after Anscombe and Matejka & Fitzmaurice.)
Probability, live
The two theorems that make an average trustworthy — one says it settles, the other says it turns into a bell — watched, not asserted.
The Law of Large Numbers — averages settle
The bridge the frequentist–Bayesian story crosses: averages settle as the sample grows. Watch it happen.
The relative frequency wanders at first, then is dragged toward the amber p as flips pile up. The shaded funnel is ±2· around the true p — the estimate's sampling spread. It closes like : quadruple the flips to halve the error, and the frequency stays inside it about 95% of the time.
The Central Limit Theorem — why the average is always a bell
Pick a lumpy, skewed, or split source and histogram the means of many samples. As the sample size grows, that histogram forgets the source and becomes a Gaussian — narrowing like σ/√n.
At n = 1 you're just looking at the source — skewed, split, whatever it is. Push n up and the distribution of the average forgets that shape and becomes the same bell every time, narrowing like σ/√n. And that rate is not a guess: the measured spread of the 1500 sample means stays locked to the predicted σ/√n at every n — the match holds near 1.00, the standard error confirmed by counting. That inevitability is why the Gaussian is everywhere, and why an average is trustworthy long before a single draw is.
The complex plane & the frontier
Out past the real line and toward the open questions: roots as winding numbers, Newton's fractal basins, knots read by a polynomial, ζ on its critical line, where a classical series gives up, and a box no one has found.
The complex plane, painted
Roots, winding, and the Fundamental Theorem of Algebra
A polynomial is just its roots. Move them; let a loop count the ones it encloses — the argument principle, live.
A monic polynomial is just its roots, . This is its phase portrait over a patch of the complex plane: each point z is coloured by the angle and shaded by its size , so every root becomes a dark pinwheel where all the hues meet. Drag a root and the whole field reorganises around it.
The winding number of a closed curve about a point is the net number of full counter-clockwise turns it makes around that point — a signed integer you read off by following the angle and counting revolutions. Here the curve is , the image of the dashed contour (a circle) under the polynomial, shown in the corner inset.
The argument principle says that winding number about the origin equals the number of roots the contour encloses:
We trace that angle the long way round and it lands on the honest count every time. Press enclose alland the winding equals the degree: a degree- polynomial has exactly roots — the Fundamental Theorem of Algebra, measured rather than asserted. The preset drops the roots onto the unit circle as the th roots of unity, the cyclotomic gateway that, run forward, becomes the modular world next door.
Newton's basins — the same roots, as complex dynamics
Ask not where the polynomial is, but where Newton's method goes. Colour each starting point by the root it falls into — the basins are simple near the roots and shatter into a fractal on their shared border.
Start with the base cases. has roots : Newton cleaves the plane into two half-planes, each point sliding to its nearer root, and the border between them is a straight line. Add one more root — — and that border can no longer stay straight: three basins cannot meet along a clean curve without every meeting point touching all three at once, so it shreds into a fractal. Watch it happen with the two presets below.
Same roots, a different question: not where is p but where does Newton go. From each starting point we run until it lands on a root, then colour that pixel by which root caught it and brighten it by how fast. Near a root the basin is calm; on the shared border the colours shred into a Julia set, where an arbitrarily small move changes the destination, and (famously) every boundary point touches all the basins at once. Because , the step needs no coefficients — the roots are the whole story. Drag a root and the basins heave; turn the relaxation and the fractal re-grows. The preset is Newton on the roots of unity from next door — the picture that started the whole subject of complex dynamics.
Knots, and the polynomials that measure them
Read a polynomial off a knot diagram that doesn't depend on how you drew it. Pick a knot; the Jones polynomial is computed live.
The Kauffman bracket splits every crossing two ways, sums the 2ⁿ resulting pictures in powers of A, corrects for writhe, and substitutes A = t−1/4 — the Jones polynomial V(t), computed live from the diagram alone. The three unknot drawings all get V = 1 (try one), while the left and right trefoils get mirror polynomials — the Jones polynomial proves the trefoil is chiral.
The frontier — honestly bounded
The zeta function, on the line
Compute up the vertical line and watch the zeros appear only on the critical line. The modular-forms road that leads here is the Eigenbook.
This is a phase portrait of ζ(s) over the critical strip: hue is arg ζ, brightness is |ζ|. The nontrivial zeros are the dark points where all the hues spiral together — and they sit, one above the next, on the single dashed line Re(s) = ½. Drag the coloured slice: at σ = ½ its |ζ| profile (right) pinches to zero exactly level with each pinwheel; leave the line and every dip lifts off zero. The Riemann Hypothesis is the claim that this is no accident — that every nontrivial zero lies on this line. Verified for the first ten trillion, unproven for all.
Random matrices — a spectrum is a fingerprint
Fill a matrix with pure Gaussian noise, force it symmetric, and diagonalize — in your browser, live. Do it again and the individual eigenvalues jump, but their statistics lock onto two universal laws: the semicircle for the density, the Wigner surmise for the gaps. The tie back to the zeros above is one of the strangest facts in mathematics — the spacings of eigenvalues match the spacings of the Riemann zeta zeros (Montgomery–Odlyzko). The same fingerprint, on two very different objects.
An ensemble is a probability distribution over matrices. Each draw is one 100×100 matrix of random Gaussian entries — made symmetric so its eigenvalues are real — and diagonalizing it gives 100 of them. Pooling 12 such matrices collects 1200 eigenvalues: a bigger N sharpens the semicircle (finite-size wobble shrinks), more matrices smooth the spacing statistics. building… 0/12
Every entry is fresh Gaussian noise, yet the two shapes barely move — that is universality. The density is ensemble-blind; the gaps see only the symmetry class (β): real vs. complex repel at different rates. It is why a spectrum is a fingerprint — the same “shape from a spectrum” that runs through the Eigenbook and the spectral thread of the research program.
The p-adic world — an ultrametric random walk
Over “close” means sharing many low digits, so the geometry is a tree, not a line, and distance is ultrametric. A random walk there jumps at every scale and relaxes in a log-periodic staircase; sampling the Haar measure estimates a -adic zeta integral. All three run live below — the same math verified in dependency-free C.
What you’re looking at. Ordinary numbers sit on a line; p-adic numbers sit on a tree. Every leaf below is a residue , and two leaves are close when they share many low digits — so “distance” is how far up you climb to their common branch. Drag hops to send a random walker across the tree: each jump climbs to the common ancestor of where it was and where it lands (that height is the distance), then drops to the new leaf.
The middle inequality is the whole story: distance on a tree is ultrametric — every triangle is isosceles, so “how far apart” only ever means “which branch do we share.” Jumps follow the Vladimirov kernel (right); the slider tunes how often the walker takes a long, root-reaching hop.
Two facts the tree forces, checked live in the readout: (1) a jump escapes a level- ball only when its separation , so escape times are geometric and scale by — the discrete scale invariance that gives p-adic diffusion its log-periodic clock. (2) Sampling the tree uniformly (Haar measure) and averaging lands on a clean closed form, — the local zeta integral.
The same math, verified in dependency-free C behind an adversarial-review + sanitizer gate, lives at github.com/tbrown25/p-adic-mc — arithmetic → the ultrametric walk → ensemble diffusion → Haar Monte-Carlo, and it connects to the number-theory road of the Eigenbook.
Ramanujan's equations — three ODEs that make the modular forms
Ramanujan found that satisfy a closed system of differential equations. Start them at and integrate: they regenerate the Eisenstein series exactly, and hand you and — the road to the Eigenbook.
Ramanujan’s three differential equations, starting from at , regenerate the Eisenstein series. The RK4 solution (lines) lands on their q-series (dots) — and from alone you get the discriminant and the -invariant.
With , these are a closed system — three equations that generate all of modular forms. The discriminant is the first cusp form; is the modular invariant. It connects to the modular-forms road of the Eigenbook.
The Laplace limit — where Kepler's series gives up
A constant hiding in the night sky: ≈ 0.6627, the eccentricity past which the classical series for an orbit stops converging. It is a radius of convergence — a Cauchy–Hadamard number — and its defining equation is hyperbolic. Drag the eccentricity across it and watch the series lock on, then blow up.
Kepler's equation M = E − e·sin E ties the clock (mean anomaly M) to position on the ellipse (eccentric anomaly E) — and there is no closed form for E. The natural fix is a power series in the eccentricity: E = M + c₁e + c₂e² + ⋯. Laplace found it has a hard wall. For e < λ ≈ 0.6627 the series locks onto the true orbit (the error plunges); for e > λ it diverges no matter how many terms you keep — the eccentric anomaly is still perfectly well-defined (Newton finds it instantly), the series just can't reach it. That wall is a radius of convergence — a Cauchy–Hadamard number, fixed by the nearest singularity of E(e) in the complex plane.
An open problem — does a perfect cuboid exist?
An Euler brick has whole-number edges and face diagonals; demand a whole space diagonal too and you reach a box no one has ever found and no one has proven impossible.
| a | edge | 44 ✓ |
| b | edge | 117 ✓ |
| c | edge | 240 ✓ |
| d | √(a²+b²) | 125 ✓ |
| e | √(a²+c²) | 244 ✓ |
| f | √(b²+c²) | 267 ✓ |
| g | √(a²+b²+c²) | √73225 = 270.601… |
Paul Halcke, 1719 — the smallest Euler brick. gcd(a,b,c)=1 (primitive).
- Exactly one edge is odd; the other two are even. The space diagonal is odd.
- One edge is divisible by 4, another by 16. Two face diagonals are odd, one divisible by 4.
- Two edges are divisible by 3 — and at least one of those by 9.
- Some edge is divisible by 5, some by 7, some by 11, some by 19.
- Something (an edge, a face, or the space diagonal) is divisible by 13, by 17, by 29, by 37.
- Every prime factor of the space diagonal is ≡ 1 (mod 4); it has at least three prime factors.
- So the product of all seven lengths is divisible by 2⁸·3⁴·5³·7·11·13·17·19·29·37 — yet none has ever been found.
Seven lengths, four equations: a²+b²=d², a²+c²=e², b²+c²=f², a²+b²+c²=g². Over ℝ they are no constraint at all — every box solves them. The entire difficulty is the demand that all seven be integers (and since the equations are homogeneous, rational ⇒ integer by clearing denominators, so ℚ and ℤ ask the same thing). So the only meaningful gap is ℝ versus ℚ = ℤ — climb the ladder ℕ → ℤ → ℚ → ℝ and the very same Pythagoras flips from one of the hardest open questions to trivially solvable, without touching the equations. That is what makes “does an Euler brick exist?” a question about what a number is: a perfect cuboid would be a rational point on a K3-type surface, forcing a congruent-number elliptic curve of rank ≥ 2 — tying this brick to Birch–Swinnerton-Dyer. The Euler brick is built from Pythagorean triples; the perfect cuboid is the one box we have never been able to build, or to forbid.
Editable Python companions run in your browser on Compute.