Why this needs server compute
Everything in #580 and #588 was done in pure Python with no numpy and no scipy, which caps us at width 8 (1430 states). The one question Phase A could not answer is a width question, and it is the question that decides how the whole block gets written up.
The measurement is cheap with numpy/scipy on a server and impossible without it. Width 9 is 4862 states, width 10 is 16796. Dense linear algebra at 16796 is out of reach even with numpy; the algorithms below are all sparse matrix-vector or matrix-free, so width 10 is comfortable with scipy sparse and width 11 (58786) is probably reachable if width 10 comes back clean.
The object
P398 is the noncrossing planar connectivity process: canonical noncrossing states on w boundary points (Catalan numbers 14, 42, 132, 429, 1430, 4862, 16796 for w = 4..10), with two moves per boundary point, join_cyclic_adjacent and detach. It is already implemented exactly and deterministically in this repository:
scripts/noncrossing_connectivity_codec.py canonical state enumeration
scripts/planar_state_operations.py the two moves
scripts/p398_intervention_transport.py Generator, spans, lumping, modular rank
scripts/p398_projected_memory.py projection, memory kernel, Hankel order
scripts/planar_transition_table.py emits a content-hashed transition table and is the right cross-check that a reimplementation agrees with ours before any new width is trusted.
The generator acts on functions, (G f)_i = sum_j G_ij f_j, with the affine family
G_eta = G_0 + eta * H, H = sum(join) - sum(detach)
Self-transitions are dropped (they cancel between an off-diagonal entry and the exit rate).
What to compute, at widths 9 and 10
All at eta = 0 unless stated. Declared before the numbers exist; do not substitute a different span, dictionary or lag grid.
Frozen configuration (must match ours exactly)
Readout seeds, in this order: the constant function 1, then blocks, singletons, wrap (definitions in p398_intervention_transport.py, observable_*). Block Krylov span built at rank 12 and prefixed to rank 6, with each frontier vector normalized before the next application of G (raw powers reach NaN otherwise) and the frontier kept in declared seed order. Phi orthonormal in the counting inner product.
Deliverable 1 — the memory degree (the reason this ticket exists)
C = Q G Phi, Q = I - Phi Phi^T
K(tau) = Phi^T G exp(tau D) C, D = Q G Q
D is 16790 x 16790 at width 10 and must not be formed. Propagate the columns of C as full-space vectors constrained to range(Q), taking exp(tau D) v by uniformization on I + D/Lambda (re-project onto range(Q) every few steps; the seeds are in range(Q) and Q G v lands there exactly, so only roundoff leaks). Sample K on the uniform grid t = 0, 0.25, ..., 4.0.
Report:
rank C (we get 3 at widths 5-8)
block-Hankel numerical rank at tol 1e-6 (we get 4, 9, 12, 13, 14 at widths 4-8)
effective order at 99% and 99.9% energy (we get 3 flat, and 2,3,4,4,4)
integrated ||K||, decay time, tail mass > t=2 (we get 1.681, 0.136, 0.0006 at width 8)
the leading 16 singular values, normalized
The question is whether the numerical order keeps growing. It goes 4, 9, 12, 13, 14 across widths 4-8 while the state space multiplies by 102 — sublinear, apparently flattening, but not flat. Two more widths separate "saturates" from "grows like log n" from "grows like a small power". That distinction decides whether this object supports a bounded non-Markov reduced description or belongs with the predictive-noncompression results.
Build the block Hankel from samples 1..16 (drop t = 0), 8 x 8 blocks of size 6, and take singular values via an actual SVD rather than the eigendecomposition of H^T H — our square-root formulation caps precision near 1e-8 and that is exactly the range where the tail lives.
Deliverable 2 — the three rank notions continued
width states r_linear(D0) r_positive r_transport
4 14 10 10 4
5 42 26 26 4
6 132 72 76 6
7 429 218 232 6
8 1430 >=150 750 6
r_linear = dim span{G_0^k f} over the D0 readouts. Compute by exact elimination over the prime 2147483647 — the generator and readouts are integer-valued, so this is exact and is a certified lower bound on the rational rank. Do not use floating-point Gram-Schmidt: at width 6 it returns 132 (the full space) against a true 72, because repeated generator application collapses onto the dominant direction and a pivot tolerance then decides the answer. Our width-8 entry is a budget-truncated >=150; please give the true value at widths 8, 9, 10.
r_positive = block count of the coarsest exact strong lumping refining the readout colouring, computed jointly against G_0 and H (so it is the coarsest lumping valid for the whole affine family). Partition refinement on the signature "total rate into each block", exact rational or integer arithmetic. Verify the aggregate against the full chain on the declared lag grid; ours agrees to 2.7e-15.
r_transport = smallest rank in (3,4,6,8,12) whose frozen span transports eta = ±1/4 within the declared threshold. Needs the response scoring, which is cheap.
The gap r_positive / r_transport is 125 at width 8 and widening. Widths 9-10 say whether it widens linearly in the state count or slower.
Deliverable 3 — the out-of-pencil lumping collapse
Repeat the joint lumping with H_single = the tilt of join at boundary point 0 only, which is outside the span{J, D} pencil. At every width 4-8 the coarsest lumping valid for that family collapses to the identity partition. Confirm or break this at 9 and 10. It is currently the sharpest structural result in the block and it would be good to know it is not a small-width accident.
Controls this must pass before any number is reported
Non-negotiable, and all of them are cheap:
- The transition table content hash at widths 1-8 must reproduce
scripts/planar_transition_table.py --maximum-width 8. If a reimplementation disagrees there, nothing after it counts.
- Exact row sums zero; positivity of all rates for
|eta| <= 1; the chain strongly connected.
exp(tG) 1 = 1 to machine precision.
- Uniformization against an independent dense Taylor exponential at width 5.
- A full-rank projection must give
K identically zero, and a generator-closed Krylov span must give K = 0 to 1e-8 relative — both are exact zeros in the mathematics and catch a leaking complement.
- The resolvent Schur identity
Phi^T (sI-G)^{-1} Phi = (sI - A - B(sI-D)^{-1}C)^{-1} at width 5 for a few real s > 0. This is the one a transposed B/C does not survive, and it involves no time integration.
Our values for controls 5 and 6 at width 4: 0.0, 6.1e-30, and 7.4e-16.
Format
A JSON artifact mirroring results/p398-projected-memory/latest.json plus the rank table, with every control value included and the code used. Widths 4-8 recomputed as well, so agreement with our numbers above is visible in the same file. If width 10 is expensive, width 9 alone answers most of the question and is worth returning on its own.
Boundary
This is a calibration model. Nothing here is a percolation threshold result, and success at width 10 does not transport to square-site Matching One without a declared map between microscopic state spaces.
Related: #588, #580, #549, #550.
Why this needs server compute
Everything in #580 and #588 was done in pure Python with no numpy and no scipy, which caps us at width 8 (1430 states). The one question Phase A could not answer is a width question, and it is the question that decides how the whole block gets written up.
The measurement is cheap with numpy/scipy on a server and impossible without it. Width 9 is 4862 states, width 10 is 16796. Dense linear algebra at 16796 is out of reach even with numpy; the algorithms below are all sparse matrix-vector or matrix-free, so width 10 is comfortable with scipy sparse and width 11 (58786) is probably reachable if width 10 comes back clean.
The object
P398 is the noncrossing planar connectivity process: canonical noncrossing states on
wboundary points (Catalan numbers 14, 42, 132, 429, 1430, 4862, 16796 forw = 4..10), with two moves per boundary point,join_cyclic_adjacentanddetach. It is already implemented exactly and deterministically in this repository:scripts/planar_transition_table.pyemits a content-hashed transition table and is the right cross-check that a reimplementation agrees with ours before any new width is trusted.The generator acts on functions,
(G f)_i = sum_j G_ij f_j, with the affine familySelf-transitions are dropped (they cancel between an off-diagonal entry and the exit rate).
What to compute, at widths 9 and 10
All at
eta = 0unless stated. Declared before the numbers exist; do not substitute a different span, dictionary or lag grid.Frozen configuration (must match ours exactly)
Readout seeds, in this order: the constant function
1, thenblocks,singletons,wrap(definitions inp398_intervention_transport.py,observable_*). Block Krylov span built at rank 12 and prefixed to rank 6, with each frontier vector normalized before the next application ofG(raw powers reach NaN otherwise) and the frontier kept in declared seed order.Phiorthonormal in the counting inner product.Deliverable 1 — the memory degree (the reason this ticket exists)
Dis 16790 x 16790 at width 10 and must not be formed. Propagate the columns ofCas full-space vectors constrained torange(Q), takingexp(tau D) vby uniformization onI + D/Lambda(re-project ontorange(Q)every few steps; the seeds are inrange(Q)andQ G vlands there exactly, so only roundoff leaks). SampleKon the uniform gridt = 0, 0.25, ..., 4.0.Report:
The question is whether the numerical order keeps growing. It goes 4, 9, 12, 13, 14 across widths 4-8 while the state space multiplies by 102 — sublinear, apparently flattening, but not flat. Two more widths separate "saturates" from "grows like log n" from "grows like a small power". That distinction decides whether this object supports a bounded non-Markov reduced description or belongs with the predictive-noncompression results.
Build the block Hankel from samples
1..16(dropt = 0), 8 x 8 blocks of size 6, and take singular values via an actual SVD rather than the eigendecomposition ofH^T H— our square-root formulation caps precision near1e-8and that is exactly the range where the tail lives.Deliverable 2 — the three rank notions continued
r_linear=dim span{G_0^k f}over the D0 readouts. Compute by exact elimination over the prime 2147483647 — the generator and readouts are integer-valued, so this is exact and is a certified lower bound on the rational rank. Do not use floating-point Gram-Schmidt: at width 6 it returns 132 (the full space) against a true 72, because repeated generator application collapses onto the dominant direction and a pivot tolerance then decides the answer. Our width-8 entry is a budget-truncated>=150; please give the true value at widths 8, 9, 10.r_positive= block count of the coarsest exact strong lumping refining the readout colouring, computed jointly againstG_0andH(so it is the coarsest lumping valid for the whole affine family). Partition refinement on the signature "total rate into each block", exact rational or integer arithmetic. Verify the aggregate against the full chain on the declared lag grid; ours agrees to2.7e-15.r_transport= smallest rank in(3,4,6,8,12)whose frozen span transportseta = ±1/4within the declared threshold. Needs the response scoring, which is cheap.The gap
r_positive / r_transportis 125 at width 8 and widening. Widths 9-10 say whether it widens linearly in the state count or slower.Deliverable 3 — the out-of-pencil lumping collapse
Repeat the joint lumping with
H_single =the tilt ofjoinat boundary point 0 only, which is outside thespan{J, D}pencil. At every width 4-8 the coarsest lumping valid for that family collapses to the identity partition. Confirm or break this at 9 and 10. It is currently the sharpest structural result in the block and it would be good to know it is not a small-width accident.Controls this must pass before any number is reported
Non-negotiable, and all of them are cheap:
scripts/planar_transition_table.py --maximum-width 8. If a reimplementation disagrees there, nothing after it counts.|eta| <= 1; the chain strongly connected.exp(tG) 1 = 1to machine precision.Kidentically zero, and a generator-closed Krylov span must giveK = 0to1e-8relative — both are exact zeros in the mathematics and catch a leaking complement.Phi^T (sI-G)^{-1} Phi = (sI - A - B(sI-D)^{-1}C)^{-1}at width 5 for a few reals > 0. This is the one a transposedB/Cdoes not survive, and it involves no time integration.Our values for controls 5 and 6 at width 4:
0.0,6.1e-30, and7.4e-16.Format
A JSON artifact mirroring
results/p398-projected-memory/latest.jsonplus the rank table, with every control value included and the code used. Widths 4-8 recomputed as well, so agreement with our numbers above is visible in the same file. If width 10 is expensive, width 9 alone answers most of the question and is worth returning on its own.Boundary
This is a calibration model. Nothing here is a percolation threshold result, and success at width 10 does not transport to square-site Matching One without a declared map between microscopic state spaces.
Related: #588, #580, #549, #550.