/teal-sea
teal-sea / zeta-labstate of record · compiled 02 Nov 2026 · revision b09fa4dd · source

Library · hunts/weil_propagation/c4_s2/two_adic/BRIEF.md

Brief: two_adic/, gap (b), P_2 through E_S and the assembly of T_S

2,385 words · 252 lines · source

You own hunts/weil_propagation/c4_s2/two_adic/ and write nowhere else. Time box: 3 hours of work from your start. At the box, write RESULTS.md with what stands and stop.

The gap

The action of the 2-adic projection P_2 on window functions through the map E_S is not given in a form that yields matrix entries. You build it, and you own the assembly of T_S(f) = Tr(ϑ_S(f) Π_S ϑ_S(f)*) for S = {∞, 2} with the product-ball projection Π_S = S_∞ ⊗ P_2 + 1 ⊗ (1 − P_2).

Inputs

Tasks, in order

  1. Fix the objects exactly from the sources, for S = {∞, 2}: X_S, the scaling action ϑ_S, E_S and the S-unit quotient, the product-ball cutoff, P_2. Recheck the factorization of Π_S. Milestone 1: status message.
  2. The action of P_2 through E_S on window functions, as matrix entries on the shared basis. Start with the 1 ⊗ (1 − P_2) piece, which needs no archimedean data.
  3. T_S_matrix(c, N, dps, local_data, arch_type) on the mission cells. local_data is the tower at 2 given as Satake parameters α_{j,2} (degree d); ζ is (1,), Dedekind ζ_{Q(√−23)} is (1, 1). The builder must refuse non-unitary parameters (|α| ≠ 1) and a tower s_k(2) that is not of the form Σ_j α_j^k with unitary α_j (mission kill-control 2: W_a and Epstein (1,1,6) must be refused; returning a trace term for them is a defect). Report the inertia of T_S at each cell (unitarity says it is positive semidefinite; measure it, do not assume it), and check that switching the place 2 off reproduces kernel/'s T_inf_matrix. Milestone 2: status message with the cell numbers.
  4. S_∞ comes from kernel/. The coordinator routes kernel/INTERFACE.md to you when it exists. Until then build against a stub with the interface the mission names, and do not edit kernel/. If the representation kernel/ delivers does not fit, say what you need through ask; do not build a second S_∞.
  5. INTERFACE.md in your folder: functions, conventions, JSON keys.

cutoff/ works on the product-ball versus global-module question and may read your folder. You use the product-ball cutoff.

Standing rules (identical in all four briefs)

Follow-up, 2026-09-24: grade the Modal accuracy run (s7b)

Added by the coordinator. The operator approved running your s7b compute proposal on Modal. modal/ ran it; its outputs are in hunts/weil_propagation/c4_s2/modal/out/gram_<nvec>_<S>.json, one per (nvec, S), in the shape ta_gram_probe.py writes for one run: nvec 140, 160, 180, 200 at S = 4800 and 160 at S = 9600, plus the calibration run 80 at S = 4800, which matches your committed ta_gram_probe.json entry to 8.2e−15. Provenance (tree 284eff6, versions, wall and CPU seconds, cost) is in modal/RUNS.md. Everything above in this brief still applies.

Your task: grade it, in this folder only.

  1. Merge the new runs into ta_gram_probe.json in its existing shape, each marked with its source (modal/out/..., tree 284eff6, platform). Read modal/ files; never edit them.
  2. Apply the criterion your script's docstring fixed before the S = 4800 runs were read (s7b): the nvec response at S = 4800, the S response at 160 modes (4800 against 9600), and the probe. State whether ΔT's band on c = 2.2, N = 8 now falls below Q's lowest eigenvalue there (2.5738e−4), at which nvec, or that it does not. Your s7b extrapolation (the 0.36 ratio per 20 modes) was a prediction: say whether the new runs confirm or refute it. Do not move the criterion after reading the numbers.
  3. Update RESULTS s7b, and your first five lines where they change (line 1's band, line 5's open item), with grades: measured (float64, one route) unless something is independently checked.
  4. Pin every new number with a test in this folder that reads ta_gram_probe.json (and, for the merge, the modal/out/ files).

Constraints for this follow-up:

Follow-up 2, 2026-09-24: your citations of checker/ went stale

Added by the coordinator. checker/ re-graded R_S at N = 32 after you finished (8d66d09, 3dc0a74; its RESULTS lines 1 to 3 and s7.7). Two tests in test_ta_checker_citations.py now fail against checker/checker_ts_cells.json (test_n_minus_of_R_S_below_band: c = 2.2 reads 4, 4, 0, not 4, 4, 3; test_N8_refinement: refinement_response["32"] is no longer None), and your RESULTS line 5 and line 589 still quote the old N = 32 counts (4, 4, 3 / 4, 9, 20 / 4, 10, 20).

Task: bring your citations of checker/ up to date, in this folder only. Read checker/'s RESULTS lines 1 to 3 and s7.7 and its JSON; cite what it now says (the N = 8 and 16 counts are unchanged; at N = 32 the count is undecided on that route in float64, with the reasons checker/ gives), and update the two tests to pin the current checker/ values. Change no mathematical statement of your own. Same constraints as the first follow-up: no edits to T_S's import closure, no runs beyond the tests, your folder only, pathspec commits, no push, no em dashes.

Follow-up 3, 2026-09-24: replace the explicit inverse in ta_mellin.rho

Added by the coordinator. Approved by the operator (MISSION.md, follow-up 2). checker/ s7.7 found that at N = 32 your default mode rule gives cond(Gb) = 1.1e17 / 2.8e18 / 5.1e17 at 280 / 319 / 364 modes (4.9e12 at 240, 3.9e9 at 200), and T_S then fails T_S >= 0 by 14 to 37. rho computes G^{-1} with np.linalg.inv. Your task is to replace that step with a stable route, prove it on the cases that matter, and pin it.

Two traps, stated so you do not walk into them. (i) gram_v forms G = V^* W V from weighted samples of the functions, so cond(G) is the square of the sample matrix's condition. A Cholesky or QR solve on G cannot recover what forming G in float64 already lost. A route that avoids squaring: QR (or SVD) of the weighted sample matrix W^{1/2} V^T itself, never forming G, with rho(s) as the squared norm of a triangular solve against the hats. (ii) "mpmath at raised dps for that step only" has the same flaw if G is still assembled in float64; raised precision helps only if the samples (and, where it matters, the hats) are carried at that precision. These are the coordinator's reading of the code, not a derivation: check them.

Step 1, diagnose before you fix, and commit the diagnosis first. At 200, 240, 280, 319 and 364 modes (N = 32 settings), report: the w-node count of gram_v against nvec; cond(Gb) at 240 with a refined per_panel and a raised Kmax; cond at 240 with the samples and Gb assembled in mpmath (dps 30 or more). Decide from that whether the ill-conditioning is intrinsic to the functions or produced by the quadrature. If the quadrature is under-resolved, the fix includes gram_v's grid, not only the solve. Anything that takes more than a few minutes locally: say which and its estimate, and ask; modal/ can run it.

Step 2, fix. Keep the old route under another name (for example rho_inv) as the reference; do not delete it.

Step 3, pin, with acceptance written before you run it:

Step 4, inventory. ta_mellin.py is in T_S's import closure: your commit changes checker/'s T_S digest, so every snapshot row (N = 8, 16, 32) stops being served until rebuilt. List every committed artifact of yours that depends on rho (for example ta_ts_prolate.json, ta_ts_cells.json, ta_gram_probe.json), which you regenerated (a few minutes each, locally) and which need modal/ (with an estimate). Update RESULTS and INTERFACE.

Constraints: your folder only; ta_mellin.py (and, only if Step 1 requires it, the other closure files) may now be edited, and nothing in kernel/. Nothing heavy locally. Pathspec commits, no push, no em dashes. Run your folder's tests plus tests/test_hunt_probe_discipline.py and tests/test_docs_numbering.py. Expect checker/'s snapshot-serving tests to go red after your commit: that is the guard working, and checker/ rebuilds after you. Say in worker_done which checker/ tests you saw fail and why.

Follow-up 4, 2026-09-24: your citations of checker/ went stale again

Added by the coordinator. checker/ rebuilt its snapshot under your QR rho and re-graded (49db49f reading, 3e36fa4 analysis; its RESULTS lines 1 to 3 and s7.8, which lists every changed, added and removed key of checker_ts_cells.json). test_ta_checker_citations.py fails again in test_n_minus_of_R_S_below_band and test_N8_refinement, and your RESULTS cite the old-route N = 32 reading (undecided in float64).

Task, exactly as in follow-up 2: bring your citations of checker/ up to date in this folder only (RESULTS lines and paragraphs that cite checker/, INTERFACE if it does, the citation tests), and change no mathematical statement of your own. Where you cite the old-route reading, keep it as history with its commit (3dc0a74) and add the new one. Also check your s10 prediction lines against checker/'s outcome (the falsifier passed on 280, 319 and 364; the 240-mode row landed within 1e−2 at 2.9 and 2.5 but not at 2.2) and say which predictions held, without rewording them. Same constraints as before: no closure-file edits, no runs beyond the tests, pathspec commits, no push, no em dashes.