The Mathematical Menagerie: One Tool Was Not Enough
2026-07-29 • 7 min read
I started planning this project as one tool. I wanted something that computes
$$ \int_0^T \|\omega(t)\|_{L^\infty}\,dt = \infty \iff \text{singularity at } T $$
the Beale-Kato-Majda quantity, or something close to it, and watches it while a 3D fluid field evolves. If it blows up, that is the criterion, made visible. I spent a few days on that plan before I started writing any code, and while I was planning it I realized the plan was wrong. Figuring out why took longer than the code I have written since.
The plan I threw out
The one-tool plan assumes the norm is the hard part. It is not. Computing $\|\omega\|_{B^0_{\infty,\infty}}$ on a smooth field, once you have a Littlewood-Paley decomposition, is direct. That part is working now, and it was never where the difficulty was going to live. The hard part is upstream: why does the nonlinear advection term $(u\cdot\nabla)u$ resist the energy estimates that work for linear equations? A single tool that only measures a norm cannot show that, because measuring a quantity is not the same as explaining what forces it to grow.
The second thing the one-tool plan assumed was that I would recognize blow-up if I saw it. 3D Euler and Navier-Stokes blow-up is open. Nobody has ever produced a genuine example, numerically or otherwise, at any resolution anyone can currently run. If all I had was a norm-tracker pointed at an equation where nobody knows whether blow-up happens, I would have no way to check whether my diagnostic was even built correctly. A thermometer is only as trustworthy as your ability to test it against a temperature you already know.
Both parts of the plan were wrong in the same direction. I was treating the criterion as a measurement problem, when it is a measurement problem sitting on top of a control problem, sitting on top of the fact that I had no ground truth to calibrate against.
Three tools, not one
That is why this project split into three repositories instead of staying one. Each exists because the one-tool plan failed at a specific point, not because three tools sound more impressive than one.
dyadic-besov-analyzer is the measurement layer, and it is the only one
of the three that is actually built. It takes a 3D vector field, applies a
smooth Littlewood-Paley decomposition, and computes $\|u\|_{B^s_{p,q}}$ for
arbitrary $s$, $p$, $q$, including both $H^s = B^s_{2,2}$ and the
scale-invariant $B^0_{\infty,\infty}$ on the same field, so the two can be
compared directly instead of taken on faith from a textbook inequality. The
Littlewood-Paley filters form a smooth partition of unity, and $\sum_j
\varphi_j$ comes out to $1$ with error 0.000e+00 at float64 on every grid
I have tested. That surprised me at first, since I expected some residual
from the smooth cutoff's table interpolation. There is none, because the
construction telescopes algebraically: the interpolation error in each
filter cancels out of the partial sum instead of accumulating in it.
The Besov norm of a random field came out at $88.5\%$ of its direct $L^2$ norm, not $100\%$, and I first read that gap as a bug. It is not one. Bahouri, Chemin, and Danchin state $H^s$ and $B^s_{2,2}$ as equivalent norms, not identical ones, precisely because the dyadic blocks here overlap in frequency instead of being orthogonal projections. A ratio of exactly $1$ would have meant I had built a sharp Fourier truncation by accident instead of the smooth decomposition the theory actually calls for.
def besov_norm(u, s, p, q, j_max, dyadic, freq_radius, dx):
shell_norms = []
for j in range(-1, j_max + 1):
delta_j_u = dyadic.delta(u, j, freq_radius)
lp = grid_lp_norm(delta_j_u, p, dx)
shell_norms.append(2.0 ** (j * s) * lp)
if math.isinf(q):
return max(shell_norms)
return sum(v ** q for v in shell_norms) ** (1.0 / q)
That is the entire norm once the blocks exist: weight each shell by $2^{js}$, combine in $\ell^q$. The theorem is short. Trusting that the code implements the theorem, and not something that merely resembles it, is what took the actual work.
kato-ponce-engine does not exist yet as code. It is a Manifest, a strategic goal and a list of objectives, and nothing else, and I want to say that plainly instead of letting the announcement imply otherwise. Its job, once built, is the control problem the first tool cannot touch: the Kato-Ponce commutator estimate
$$ \| J^s(fg) - f J^s g \|_{L^p} \le C\Big( \|\nabla f\|_{L^{p_1}}\|J^{s-1}g\|_{L^{p_2}} + \|J^s f\|_{L^{p_3}}\|g\|_{L^{p_4}} \Big) $$
(Kato and Ponce, Comm. Pure Appl. Math. 41 (1988), 891 to 907), the estimate that lets you bound derivatives of a product without paying for every derivative twice, which is what lets energy methods survive contact with the quadratic nonlinearity in Navier-Stokes. This is where I expect to find something specifically wrong in the same way I was wrong about the norm ratio above. Bony's paraproduct decomposition $f\cdot g = T_f g + T_g f + R(f,g)$ (Bony, Ann. Sci. ENS 14 (1981), 209 to 246) splits a product into three frequency-interaction regimes for a reason, and I do not yet have working intuition for why the high-high term $R(f,g)$ is the dangerous one. Building the engine is how I plan to find out.
nls-3d-blowup-sim is also just a Manifest right now. Its job is to be the ground truth the first two tools cannot produce on their own. The 3D focusing cubic NLS equation $i\partial_t\psi + \Delta\psi + |\psi|^2\psi = 0$ is mass-supercritical and energy-subcritical, and for negative-energy initial data it blows up in finite time, not conjecturally, but as a theorem, via Glassey's virial identity (Glassey, J. Math. Phys. 18 (1977), 1794 to 1797). That is the thermometer I can actually calibrate against. If a $B^0_{\infty,\infty}$-style diagnostic run against NLS does not sharpen as $t\to t_{\text{blowup}}$ the way the Sobolev embedding $H^1(\mathbb{R}^3)\hookrightarrow L^6(\mathbb{R}^3)$ says it should, the diagnostic is wrong, and I will know that before ever pointing it at an equation where the answer is unknown.
What changed
I no longer think of this as a Besov norm calculator, a commutator engine, and an NLS simulator. I think of it as one question, what actually obstructs global regularity for 3D incompressible flow, split across the three places I got stuck trying to answer it with a single tool. I could not measure the right quantity without the decomposition. I could not explain why the quantity grows without the commutator estimates. I could not check whether my explanation was even self-consistent without an equation where blow-up is a proven fact rather than an open problem.
The general lesson is not specific to fluids. A single measurement tool answers "how much," never "why," and never "am I even measuring the right thing." Those are two separate jobs, and my first plan was, without meaning to be, an attempt to make one tool do both.
References
- J. T. Beale, T. Kato, A. Majda, "Remarks on the breakdown of smooth solutions for the 3-D Euler equations," Comm. Math. Phys. 94 (1984), 61 to 66.
- H. Bahouri, J.-Y. Chemin, R. Danchin, Fourier Analysis and Nonlinear Partial Differential Equations, Springer, 2011. Ch. 2.
- T. Kato, G. Ponce, "Commutator estimates and the Euler and Navier-Stokes equations," Comm. Pure Appl. Math. 41 (1988), 891 to 907.
- J.-M. Bony, "Calcul symbolique et propagation des singularites pour les equations aux derivees partielles non lineaires," Ann. Sci. ENS 14 (1981), 209 to 246.
- R. Glassey, "On the blowing up of solutions to the Cauchy problem for nonlinear Schrodinger equations," J. Math. Phys. 18 (1977), 1794 to 1797.
- H. Kozono, Y. Taniuchi, "Limiting case of the Sobolev inequality in BMO, with application to the Euler equations," Comm. Math. Phys. 214 (2000), 191 to 200.