Draft · v0.2 · Unreviewed
← Index/Project · Nadarasa ReductionDraft · v0.2 · Selene Emulator
Draft v0.3.2 · Section 6 · [GAP G3] · Selene Emulator

Per-Window Cost
at Scale

The original G3 page tested the √p improvement at N = 32 only and found the observed ratios sit closer to the naive Birthday curve than to the draft's 1/√(p/2) heuristic. v0.3.2 takes the same kernel to N ∈ {16, 32, 64, 128} × p ∈ {2, 3, 5, 7} and asks the cleaner question: which closed-form scaling — measured per cell — keeps the ratio measured / predicted flat as N grows?

Verdict · neither_curve_is_flat_quantitative_claim_only. Worst flatness vs √(N/p) = 1.980 and vs √N = 1.980 — neither curve is flat to within the 20% margin. Measured first-collision queries stay roughly constant (~2.2–3.1) across the full grid because the modal projection collapses the post-selected window to a 2–3 element support per slope (see "observed support" column below). The √p improvement is not visible here, and the naive birthday curve is wrong in the same direction.

Mean queries vs N, per p (with √N and √(N/2) reference curves)

Per-cell table

Npmean queriesobs support√(N/p)√Nmeas / √(N/p)meas / √N
1622.322.252.834.000.8210.581
1632.413.002.314.001.0450.603
1652.322.671.794.001.2990.581
1672.302.501.514.001.5190.574
3222.414.254.005.660.6020.426
3232.454.253.275.660.7500.433
3252.192.502.535.660.8640.387
3272.213.002.145.661.0340.391
6422.677.255.668.000.4730.334
6432.627.754.628.000.5660.327
6452.232.753.588.000.6230.279
6472.153.753.028.000.7100.269
12823.0812.258.0011.310.3850.272
12832.566.756.5311.310.3910.226
12852.463.505.0611.310.4850.217
12872.183.754.2811.310.5100.193

What this means

The kernel's post-QFT support per SRP slope is small (a handful of high-mass y values), so once we further restrict to y mod p == 0 the windowed stream lives on 2–3 distinct outcomes regardless of N. The first-collision count therefore floors at ~2 picks and cannot exhibit either √-curve. This is a finding about the surrogate, not a refutation of the full sieve: it tells us the per-rung Birthday-on-y metric is the wrong knob, and the next G3 work item is a kernel whose modal window has support that actually grows with N (e.g. a coherent two-coset combiner like the v0.3.1 G2 build, post- selected on residue 0).

The GAP G3 ledger entry stays empirically_under_pressure_naive_birthday pending author review of this negative result; v0.3.2 records the quantitative failure mode rather than auto-flipping the verdict.

Kernel snippet (legacy cphase_on ladder + Walsh-style readout)


from quantum.nadarasa_g3_lib import guppy, qubit, h, measure, result, cphase_on

@guppy
def program() -> None:
    lbl = qubit()
    d0 = qubit()
    d1 = qubit()
    d2 = qubit()
    d3 = qubit()
    d4 = qubit()
    h(lbl)
    h(d0)
    h(d1)
    h(d2)
    h(d3)
    h(d4)
    cphase_on(lbl, d0, 0.39269908169872414)
    cphase_on(lbl, d1, 0.7853981633974483)
    cphase_on(lbl, d2, 1.5707963267948966)
    cphase_on(lbl, d3, -3.141592653589793)
    cphase_on(lbl, d4, 0.0)
    h(lbl)
    result("lbl", measure(lbl))
    h(d0)
    result("y0", measure(d0))
    h(d1)
    result("y1", measure(d1))
    h(d2)
    result("y2", measure(d2))
    h(d3)
    result("y3", measure(d3))
    h(d4)
    result("y4", measure(d4))