Module 1 of 14 · one week, two if Lax-Milgram is new
The property the video calls "resolution equals context length" turns out to be three separate properties. This module states each one exactly, proves the one that is a theorem, and shows the two that are not. The lab then evaluates one trained FNO and one trained CNN at four grids, and only one of them survives.
"Resolution invariance" is used for three claims of different strength, and the strongest one is the only one anybody cares about in practice. The weakest is that a model accepts any grid: feed it 64 points or 1024, it runs. Stronger is that the model's output converges to a single continuum operator as the grid refines, so the thing the weights encode is a map between function spaces rather than between arrays. Strongest is that the model is accurate at a grid it never trained on.
The three come apart cleanly. A transformer or a graph network satisfies the first and, according to the JMLR paper, fails the second (p.2, research_notes/pdf-fno-jmlr.md:300-304). Neural operators satisfy the first two, and that is Theorem 8, a real theorem with a real proof. The third is not a theorem at all. It is an experiment, and its outcome depends on the data, the architecture, and the grid you trained on. Lab 01 ran that experiment, and the answer is that a well-behaved FNO's relative error rises by between 18 and 56 percent at the first grid it has not seen.
That gap is the reason this module exists rather than being a paragraph in Module 2. A survey of the available teaching material found no course that walks a student through verifying resolution invariance empirically, or through aliasing, or through what happens when the training and test discretizations disagree (research_notes/teaching.md:213-214). The material exists as a slogan on one side and as Definition 4 on the other, with nothing in between. This module is the middle.
Start with what the paper actually asks for, because the informal version loses the quantifiers and the quantifiers are the whole content. JMLR Section 1.1, page 2, requires that a model with one fixed parameter vector must do three things: accept any discretization of the input, be evaluable at any point of the output domain, and converge to a continuum operator as the discretization is refined. Table 1 on page 5 scores the model classes against that list.
| Property | NNs | DeepONets | Interpolation | Neural operators |
|---|---|---|---|---|
| Discretization invariance | no | no | yes | yes |
| Output is a function | no | yes | yes | yes |
| Query output at any point | no | yes | yes | yes |
| Take input at any point | no | no | yes | yes |
| Universal approximation | no | yes | no | yes |
The formal statement is Definitions 1 to 4 on pages 8 and 9, and Module 5 quotes them in full. In words, it says this. Fix the parameters \(\theta\) once. For every compact set \(K\) of inputs, the worst-case distance over \(K\) between the model evaluated on an \(L\)-point grid and the continuum model \(G(\cdot, \theta)\) goes to zero as \(L \to \infty\). Theorem 8 proves that every neural operator with continuous activations, over function spaces that embed in \(C(\bar D)\), has this property.
Three features of that sentence do the work, and all three are easy to read past. The parameters are fixed before the grid is chosen, so no retraining is hiding inside the limit. The compact set \(K\) is the one Module 0's Fact 2 warned you about, and without it the statement is false. And the target of the convergence is \(G(\cdot,\theta)\), the model's own continuum limit, not \(G^\dagger\), the operator you were trying to learn. Nothing in the definition mentions the truth, and nothing in it says how large \(L\) must be for a stated accuracy.
The cleanest way to see that the definition is weaker than it sounds is to notice what else satisfies it. Linear interpolation scores "yes" on the first four rows of Table 1. It accepts any grid, it produces a function, you can query that function anywhere, and it converges to the identity as the grid refines. It is also a useless learner, which is why the fifth row exists. Discretization invariance is a necessary condition on an architecture, not a sufficient one, and treating a hygiene requirement as a selling point is the first error this course is trying to prevent.
Reusing one set of weights across resolutions is a weaker property than a uniform accuracy guarantee, and the two are routinely quoted as if they were the same. Accuracy at an unseen resolution needs two further assumptions: something about the information the training grid could not carry, and something about whether every operation in the network stays numerically consistent when the grid changes. The rest of this module supplies the first. Module 2 finds an architecture that violates the second by accident.
Before an operator can be learned, it has to exist, be single-valued, and depend continuously on its input. Those three are not free, and the elliptic problem is the standard case where you can watch all three being bought.
The classical formulation will not do here, and the reason comes first, because it explains why the weak form appears at all. The Darcy problem is \(-\nabla\cdot(a\nabla u) = f\) with a coefficient \(a\) that jumps between two values across an interface. At such an interface \(a \nabla u\) is discontinuous, so its divergence does not exist as a function, and the equation as written has no meaning there. The weak form removes the offending derivative by moving it onto a test function, and it does so without weakening the problem: for smooth data the two formulations have the same solution.
The spaces. \(H^1(D)\) is the set of \(u \in L^2(D)\) whose first derivatives, taken in the distributional sense, also lie in \(L^2(D)\). \(H^1_0(D)\) is the closure in \(H^1\) of the smooth functions that vanish near \(\partial D\); it is the precise version of "\(u = 0\) on the boundary" for a function that has no point values. \(H^{-1}(D)\) is the dual of \(H^1_0(D)\), the space of bounded linear functionals on it, and it is where the right-hand side \(f\) is allowed to live.
Poincaré, so that the norm is a norm. On \(H^1_0\) the quantity \(\|\nabla v\|_2\) is used as the norm, which requires that \(\nabla v = 0\) forces \(v = 0\). In one dimension on \((0,1)\) the proof is two lines. For \(v \in H^1_0(0,1)\), \(v(x) = \int_0^x v'(t)\,dt\), so Cauchy-Schwarz gives \(|v(x)|^2 \le x\int_0^1 |v'|^2\). Integrating over \(x \in (0,1)\), \[\|v\|_2^2 \le \tfrac12 \|v'\|_2^2 .\] So \(\|v'\|_2 = 0\) forces \(\|v\|_2 = 0\). The same inequality holds on any bounded domain with a constant that depends on the domain, and the vanishing boundary data is what makes it true: on \(H^1\) without the boundary condition the constants are a counterexample.
Weak form. Multiply \(-\nabla\cdot(a\nabla u) = f\) by a test function \(v \in H^1_0(D)\) and integrate by parts. The boundary term dies because \(v\) vanishes there. What is left is: find \(u \in H^1_0\) with \[B_a(u, v) := \int_D a\,\nabla u\cdot\nabla v \;=\; \langle f, v\rangle \quad\text{for every } v \in H^1_0 .\] No second derivative of \(u\) appears, and no derivative of \(a\) appears at all.
Lax-Milgram. Suppose \(a \in L^\infty(D)\) and \(a \ge \alpha > 0\) almost everywhere. Then \(B_a\) is bounded, meaning \(|B_a(u,v)| \le \|a\|_\infty\|\nabla u\|_2\|\nabla v\|_2\) by Hölder, and coercive, meaning \(B_a(u,u) \ge \alpha\|\nabla u\|_2^2\) directly from \(a \ge \alpha\). Lax-Milgram then supplies exactly one \(u_a \in H^1_0\), together with the energy bound \[\|\nabla u_a\|_2 \le \alpha^{-1}\|f\|_{H^{-1}} .\] Existence, uniqueness and stability, from two inequalities.
That settles whether the operator exists. Whether it is a reasonable thing to hand a learner is a separate question, and the answer is the following bound. It says the map from coefficient to solution is Lipschitz, with a constant that tells you exactly which problems will be hard.
Claim (the coefficient-to-solution map is Lipschitz). For \(a, b \in L^\infty(D)\) with \(a, b \ge \alpha > 0\), and a fixed \(f \in H^{-1}\), \[\|\nabla(u_a - u_b)\|_2 \le \alpha^{-2}\,\|a - b\|_\infty\,\|f\|_{H^{-1}} .\]
Proof. Both solutions satisfy their own weak equation against the same \(v\), so subtracting gives \(\int a\nabla u_a\cdot\nabla v = \int b\nabla u_b\cdot\nabla v\) for every \(v \in H^1_0\). Rewrite the difference of the two integrands by adding and subtracting \(a \nabla u_b\): \[a\nabla u_a - b\nabla u_b = a\nabla(u_a - u_b) + (a - b)\nabla u_b .\] Now test with \(v = u_a - u_b\), which is legal because it lies in \(H^1_0\): \[\int_D a\,|\nabla(u_a - u_b)|^2 = -\int_D (a-b)\,\nabla u_b\cdot\nabla(u_a - u_b).\] Apply coercivity on the left and Hölder followed by Cauchy-Schwarz on the right: \[\alpha\|\nabla(u_a - u_b)\|_2^2 \le \|a - b\|_\infty\,\|\nabla u_b\|_2\,\|\nabla(u_a - u_b)\|_2 .\] Divide by \(\|\nabla(u_a-u_b)\|_2\), then substitute the energy bound \(\|\nabla u_b\|_2 \le \alpha^{-1}\|f\|_{H^{-1}}\). \(\square\)
Where the ellipticity is spent. Twice, and each time it contributes one factor of \(\alpha^{-1}\): once as coercivity to absorb the left-hand side, once through the energy bound on \(u_b\). Let \(\alpha \to 0\), meaning the medium approaches an insulator somewhere, and the Lipschitz constant blows up like \(\alpha^{-2}\). That is a statement about the learning problem, not about any architecture: a coefficient field with a near-zero minimum makes the target operator badly conditioned, so small errors in the input are amplified before any network sees them.
Notice that the PDE is linear in \(u\) while the map \(a \mapsto u_a\) is not. This is the point people miss when they call Darcy a linear problem. The operator being learned is nonlinear, and the bound above is its modulus of continuity. Darcy in the FNO paper is exactly this map, with \(a\) taking the two values 12 and 3 on a random partition and \(f \equiv 1\) (research_notes/pdf-fno-jmlr.md:108-112), so \(\alpha = 3\) and the Lipschitz constant is at most \(1/9\) times \(\|f\|_{H^{-1}}\).
Module 0 showed that a five-point record of \(\sin(\pi x)\) is also a five-point record of \(\sin(\pi x) + \sin(4\pi x)\), and that the two inputs have solutions differing by 6.25 percent of the peak. That was one instance of a general mechanism with two halves. Truncation is what you lose by keeping only low modes; aliasing is what you lose by evaluating on a finite grid. They are different, they are often confused, and only one of them is under the modeller's control.
Claim. For \(u \in H^s(\mathbb T^d)\) with \(s > 0\), writing \(P^M u = \sum_{|k| \le M}\hat u(k)\,e^{2\pi i k\cdot x}\) for the truncation to modes below \(M\), \[\|u - P^M u\|_2 \le (1 + M^2)^{-s/2}\,\|u\|_{H^s} \le C M^{-s}\|u\|_{H^s}.\]
Proof. By Parseval the error is the tail \(\sum_{|k| > M}|\hat u(k)|^2\). On that tail \(|k| > M\), so \((1+|k|^2)^s / (1+M^2)^s > 1\), and multiplying each term by that quantity only increases the sum: \[\sum_{|k| > M}|\hat u(k)|^2 \le \sum_{|k|>M}\frac{(1+|k|^2)^s}{(1+M^2)^s}|\hat u(k)|^2 \le \frac{1}{(1+M^2)^{s}}\sum_{k}(1+|k|^2)^s|\hat u(k)|^2 .\] The last sum is \(\|u\|_{H^s}^2\). Take square roots. \(\square\)
The rate is the Sobolev exponent, so every extra derivative buys one more power of \(M\). Lab 01 shows the two ends of that trade in one dataset. The solution at \(t = 1\), averaged over the 200 test samples, has \(|\hat u_k|\) falling from \(2.61\times 10^{-1}\) at \(k = 1\) to \(1.24\times 10^{-3}\) at \(k=16\) and \(2.24\times 10^{-5}\) at \(k = 32\), a drop of four orders of magnitude across the band a 64-point grid can carry (../labs/01_burgers/spectrum_b_m16.npz, array truth_1024). The initial condition falls from \(3.31\times 10^{-1}\) to \(8.45\times 10^{-3}\) over the same range, a factor of 39. The viscous evolution has smoothed the field by a factor of about 380 in the top mode, \(8.45\times10^{-3}/2.24\times10^{-5}\), which is why 64 points represent the output comfortably and the input only barely.
The law gives the input's shape more precisely than the picture does. The covariance gives \(\mathbb E|\hat u_0(k)|^2 \propto (k^2+25)^{-2}\), so the coefficient size goes like \(1/(k^2+25)\): nearly flat for \(k\) below 5, and falling like \(k^{-2}\) only well above that. From \(k=1\) to \(k=32\) the predicted factor is \(1049/26 = 40\), and the measured factor is 39. Quoting "\(k^{-2}\)" without the crossover overstates how fast the low modes decay by a factor of 25.
Claim. On the uniform grid \(x_j = j/N\), the modes \(k\) and \(k+N\) are the same vector.
Proof. \(e^{2\pi i (k+N)x_j} = e^{2\pi i (k+N)j/N} = e^{2\pi i kj/N}\,e^{2\pi i j} = e^{2\pi i k x_j}\), since \(j\) is an integer. \(\square\)
Consequence. Sampling a function that has content above \(N/2\) folds that content onto lower modes, and the grid keeps no record of the fold. Module 0's example is the case \(N = 4\). In this convention \(\sin(4\pi x) = (e^{2\pi i \cdot 2x} - e^{-2\pi i \cdot 2x})/2i\) is built from the modes \(k = 2\) and \(k = -2\), which differ by exactly \(N\), so on the grid \(x_j = j/4\) they are the same vector and their difference vanishes at every node. That is why \(\sin(4\pi x)\) was indistinguishable from the zero function there. Unlike truncation, this is not an error you can bound by smoothness alone; the folded energy arrives at a low mode where it looks like signal.
Lab 01 builds its 64-point training data by taking every sixteenth point of a 1024-point solve, so the fold is real and its size can be computed exactly. Everything above \(k = 32\) lands on \(k \le 32\). With \(\mathbb E|\hat u_0(k)|^2 = 625/(k^2+25)^2\) the total is
\[\sum_{k \in \mathbb Z}\frac{625}{(k^2+25)^2} \;=\; 625\int_{-\infty}^{\infty}\frac{dk}{(k^2+25)^2} \;=\; \frac{625\,\pi}{2\cdot 5^3} \;=\; \frac{5\pi}{2} \;=\; 7.854,\]
where replacing the sum by the integral is exact to within \(O(e^{-10\pi}) \approx 2\times10^{-14}\) by Poisson summation, because the summand's transform decays like \(e^{-10\pi|\cdot|}\). The tail above \(k = 32\) is \[2\sum_{k > 32}\frac{625}{(k^2+25)^2} \;\approx\; 2\cdot 625\int_{32}^{\infty}\frac{dk}{k^4} \;=\; \frac{2 \cdot 625}{3\cdot 32^3} \;=\; 1.27\times10^{-2},\] a slight overestimate since \((k^2+25)^2 > k^4\); summing the exact terms gives \(1.18\times10^{-2}\). The fraction folded is therefore \(1.18\times10^{-2}/7.854 = 1.50\times10^{-3}\).
So 0.15 percent of the initial condition's energy is misread by the training grid. That number can be checked against the data rather than trusted: the saved test-set spectrum gives a tail fraction of \(1.56\times10^{-3}\), which agrees with the calculation to four percent (../labs/01_burgers/spectrum_b_m16.npz, array input_1024; the array holds one-sided magnitudes, so every bin except \(k=0\) counts twice, and an earlier version of this page that skipped the doubling reported \(1.43\times10^{-3}\)). It is a small number, and Module 2's exercise 1 asks whether it is nevertheless the cause of the train-test gap that run B shows.
The two mechanisms above are properties of sampling and do not depend on what the model does. The third one is created by the model, and it is the reason the FNO's error behaves the way the lab shows.
Claim. A pointwise quadratic nonlinearity applied to a single mode at frequency \(k\) creates a mode at \(2k\).
Proof. \(\big(\cos kx\big)^2 = \tfrac12 + \tfrac12\cos 2kx\), by the double-angle identity. In complex form, \((e^{ikx})^2 = e^{2ikx}\). \(\square\)
Consequence. On an \(N\)-point grid, if \(2k > N/2\) then the product cannot be represented and, by the aliasing claim above, it lands at \(2k - N\), a low mode that carries no relation to the physics. The content is not merely lost; it is deposited somewhere wrong.
A spectral PDE solver handles this with the 2/3 rule: keep only \(|k| < N/3\) before forming a product, and discard the same band again afterwards. A product of two retained modes has \(|k| < 2N/3\). If that exceeds the Nyquist mode \(N/2\) it folds, by the claim above, to \(k - N\), and \(|k - N| > N/3\) whenever \(N/2 < k < 2N/3\). So every aliased product lands in the band the second truncation throws away, and no retained mode is ever contaminated. Lab 01's solver does exactly this: the mask k < N // 3 is applied to the state before the product and to the product after it (../labs/01_burgers/run_b_paper_spec.py:69-75), which is one reason its solutions can be trusted as ground truth (the internal consistency check on the time step is \(1.9\times10^{-12}\), ../labs/01_burgers/results_b_m16.json, field solver_dt_check_rel_diff).
An FNO does not dealias. Its nonlinearity is applied pointwise on whatever grid it is currently running on, and whatever folds, folds. This is the content of the ReNO criterion: an architecture is alias-free only if every one of its operations commutes with sampling in a band-limited sense. By that criterion FNO with ReLU is not alias-free, CNO is by construction, and DeepONet is alias-free only for uniform sensors with a matched frame (research_notes/web-papers.md:689-700). It also means the model's behaviour at a new grid is not covered by the intuition "more points is more information": more points changes which products fold and where.
The consistency that Theorem 8 actually promises, written with a sampler \(S_h\), a reconstruction \(I_h\) and the model on the grid \(G_{\theta,h}\), is \(\|I_h G_{\theta,h} S_h a - G_\theta a\|_Y \to 0\) as \(h \to 0\) for fixed \(\theta\). Every symbol in that expression refers to the model. The quantity you care about at a new grid is \(\|I_h G_{\theta,h}S_h a - G^\dagger a\|_Y\), which the triangle inequality splits into the term above plus \(\|G_\theta a - G^\dagger a\|_Y\). Training drove the second term down at one value of \(h\) and said nothing about any other. That decomposition is the whole explanation of the lab result below.
The CNN argument is short, and it is the cleanest example in the paper of an architecture failing discretization invariance for a structural reason, not a numerical one (JMLR Section 4.1, pages 15 to 16, research_notes/pdf-fno-jmlr.md:372-379).
A convolution whose kernel has a fixed physical radius \(r\) is a perfectly good integral operator layer: as the grid refines it uses more taps to cover the same distance, and the sum converges to the integral. A standard CNN does the opposite. It fixes the kernel in grid points, say \(k\) taps, so as the grid refines with \(J\) points and spacing \(h \sim 1/J\), the physical support \(kh\) shrinks to zero. In the continuum limit each layer becomes a pointwise operation and a stack of them sees a neighbourhood of vanishing width. The only repair is to grow \(k\) with \(J\), and then the parameter count, which is \(k\) times the channel counts \(m n\), diverges. So a standard CNN has no continuum limit that is worth having, and no fixed parameter vector defines an operator.
The paper backs the argument with a measurement, and which paper it comes from matters. On Burgers, the fully convolutional baseline's relative error grows monotonically with resolution: 0.0958 at \(s = 256\), then 0.1407, 0.1877, 0.2313, 0.2855, and 0.3238 at \(s = 8192\). Those six numbers are identical in ICLR 2021 Table 3 (p.15) and JMLR 2023 Table 3 (p.39). The FNO row is not identical between the two papers. ICLR reports 0.0149 at \(s=256\) rising slightly to a maximum of 0.0160 at \(s = 1024\) and back to 0.0139 at \(s = 8192\); JMLR reports 0.0018 flat across all six resolutions, with the note that switching ReLU for GeLU takes it to 0.0007. The JMLR run is a retrained and better-tuned FNO rather than a reprint, and the two published figures differ by a factor of about eight.
Quote both, or say which one you mean. An earlier draft of this course reported "FNO stays between 0.0139 and 0.0160" while citing JMLR Table 3, which mixes the ICLR numbers with the JMLR label. The correction is logged at the end of research_notes/pdf-fno-jmlr.md. The distinction matters below, because Lab 01 measures 0.0224 on its own reimplementation, which is 1.5 times the ICLR figure and 12 times the JMLR figure. Those two comparisons support different conclusions about how well the lab reproduced the paper.
LAB The experiment holds everything constant except the architecture. Same 1000 training and 200 test samples from the same spectral solve, same training grid of 64 points, same 500 epochs, same Adam schedule with the learning rate halved every 100 epochs, same relative \(L^2\) loss (../labs/01_burgers/run_b_paper_spec.py, run_c_cnn_baseline.py). Each trained model is then evaluated at 64, 128, 256 and 1024 points without any retraining.
The CNN's receptive field is the quantity to keep an eye on, and it follows from the layer count. Each convolution of kernel width \(w\) extends the reach by \(w - 1\) on a stack, so eight layers of kernel 7 give \(1 + 8\times 6 = 49\) taps and four layers of kernel 5 give \(1 + 4\times 4 = 17\). At 64 points those 49 taps span 48 grid spacings, three quarters of the \(2\pi\) domain. At 1024 points the same 49 taps span 48 spacings of a sixteen-times-finer grid: 0.29 in physical units, 4.7 percent of the domain.
| Model | Params | Train | Test 64 | Test 128 | Test 256 | Test 1024 | File |
|---|---|---|---|---|---|---|---|
FNO, \(k_{\max} = 8\) (n_modes=16) | 345,665 | 0.0049 | 0.0224 | 0.0351 | 0.0349 | 0.0349 | results_b_m16.json |
FNO, \(k_{\max} = 16\) (n_modes=32) | 607,809 | 0.0027 | 0.0226 | 0.0267 | 0.0264 | 0.0264 | results_b_m32.json |
| CNN, 49 point receptive field (8 × kernel 7) | 201,729 | 0.0087 | 0.0224 | 0.6794 | 1.1433 | 1.4579 | results_c_rf49.json |
| CNN, 17 point receptive field (4 × kernel 5) | 62,081 | 0.1608 | 0.5065 | 0.7407 | 0.9507 | 1.0778 | results_c_rf17.json |
Read the third row against the first, because that pair is the whole experiment. At the training grid the 49-tap CNN and the \(k_{\max}=8\) FNO are indistinguishable: 0.0224 against 0.0224, with the CNN using 58 percent of the parameters. A convolutional network with a wide enough stencil is a perfectly good learner of this operator at the resolution it was trained on, and any claim that CNNs cannot learn PDE solution operators is refuted by that single cell of the table.
Then the grid changes. At 128 points the CNN's error is thirty times larger, 0.68. At 1024 it reaches 1.46, which is worse than predicting zero, since a prediction of zero has relative \(L^2\) error exactly 1.0. Meanwhile the two FNOs settle at 0.035 and 0.026 and stay there. The mechanism is the one derived above: at 1024 points the CNN's 49 taps reach 4.7 percent of the domain, and no stack of local operations with that reach can move information across a front that the physics has propagated much further.
How much further can be estimated from the data. The domain has length \(2\pi = 6.28\). The initial conditions have root-mean-square amplitude 1.11, and the largest value in a typical sample averages 2.59, so over one time unit a typical point is advected about 1.1 and the fastest points about 2.6, while diffusion spreads information a further \(\sqrt{\nu t} = \sqrt{0.1} = 0.32\). Call the influence radius 2.9 to be generous: 46 percent of the domain. The 49-tap stencil at 64 points covers 75 percent and comfortably contains that cone. At 1024 points it covers 4.7 percent and does not come close.
What the fourth row does not show. The 17-tap CNN fails at the training grid itself, 0.51, and it is tempting to read that as the receptive-field argument confirmed from the other side, since 17 taps cover 25 percent of the domain against an influence radius of 46 percent. Resist it. That model differs from the 49-tap model in three ways at once: depth 4 against 8, kernel 5 against 7, and 62,081 parameters against 201,729. The comparison does not isolate the receptive field, and a capacity explanation fits the numbers equally well. The clean evidence is the third row on its own, where one fixed model is evaluated at four grids and nothing but the grid changes.
The FNO rows carry a second finding that the architecture was supposed to prevent. The \(k_{\max}=8\) error rises 56 percent at the first unseen grid, from 0.0224 to 0.0351, and then stops rising: 0.0349 at 256 points and 0.0349 at 1024. Doubling the modes cuts that jump to 18 percent, from 0.0226 to 0.0267, and it too then flattens. Theorem 8 does not forbid this, because Theorem 8 promises convergence of the discretized model to its own continuum limit and says nothing about the distance to \(G^\dagger\). The rise is the second term of the callout above, \(\|G_\theta a - G^\dagger a\|\), evaluated on inputs whose high-frequency content the 64-point training grid could not carry. The fact that it plateaus rather than growing is the signature of a fixed artefact, not an accumulating one, and Module 2 identifies it: a single spurious component at the Nyquist bin, of size \(1.44\times10^{-2}\), present at every unseen grid and absent at 64 points.
research_notes/pdf-fno-jmlr.md:300-323, :372-379, :465-472.2010.08895v3.pdf, p.15) gives 0.0149 / 0.0158 / 0.0160 / 0.0146 / 0.0142 / 0.0139; JMLR 2023 Table 3 (21-1524.pdf, p.39) gives 0.0018 / 0.0018 / 0.0018 / 0.0019 / 0.0020 / 0.0019, with GeLU reducing it to 0.0007. Correction logged at the end of research_notes/pdf-fno-jmlr.md.research_notes/pdf-fno-jmlr.md:108-112.research_notes/web-papers.md:689-700.../labs/01_burgers/results_b_m16.json, results_b_m32.json, results_c_rf17.json, results_c_rf49.json; spectra in spectrum_b_m16.npz (arrays input_1024, truth_1024); input amplitudes from burgers_nu0.1.pt.research_notes/teaching.md:208-218. Theory plan Modules 2 and 8. Reading: Hunter, PDE notes, Chapters 3 and 4; Trefethen on aliasing.You can now separate the three claims that share the name "resolution invariance", prove the one that is a theorem, compute how much of a given input a given grid destroys, and explain a 65-fold error increase with an arithmetic argument about receptive fields. The questions test the middle two directly.