Canonical amplitude estimation
Brassard–Høyer–Mosca AE on the G3 coset state. Apples-to-apples vs. the birthday post-processor.
Results · real Selene shots
amplitude_estimation_verifiedCanonical QPE on a 1-qubit Z-rotation eigenstate (the standard a = sin(θ) ↔ φ = 2θ amplitude-estimation reduction). m = 4 estimation + 1 target qubit, controlled-Phase via the verified halfturn primitive cphase_h, inverse QFT without final swap (bit-reversal absorbed in host decoder). All four a ∈ {2,4,6,7} peak exactly on the predicted bin with peak mass 1.000.
Why this matters
G3 today uses a host-side birthday post-processor as a surrogate for sieve cost. Real AE is the right tool: the same coset state, same Grover-style amplification, but with a Quantum Fourier readout on the estimation register. Plotting AE variance next to the birthday bootstrap on /nadarasa/g3 makes the methodological gap obvious.
What the repo already has
Birthday-style host post-processor in nadarasa_g3.py.
What's missing
Grover operator over the coset state; 4-qubit estimation register; inverse QFT; classical readout decode.
Smallest experiment
Build it or kill itQubits
5 data + 1 marker + 4 estimation = 10 qubits
Ancilla pattern
Marker oracle controlled by estimation register; QFT^-1 on estimation; terminal measurement.
Shots
1024 shots × p ∈ {2, 3, 5}
Predicted outcome
AE estimator variance scales as 1/M (M = Grover iterations), strictly below the birthday curve's √(N/p) scaling. The two curves on the same /nadarasa/g3 plot make the methodological point on first read.
Refutation criterion
If AE variance matches or exceeds the birthday curve, the Grover oracle is wrong or the QFT readout is mis-wired.
Kernel sketch
Untested — sketch only@guppy
def amplitude_estimation() -> None:
est = array_qubit(4)
data = array_qubit(5)
marker = qubit()
prepare_coset(data)
for q in est: h(q)
for k in range(4):
for _ in range(2 ** k):
controlled_grover(est[k], data, marker)
inverse_qft(est)
for j, q in enumerate(est):
result(f"e{j}", measure(q))Host pipeline
Decode est bits to a fraction; theta = pi * frac; amplitude = sin(theta). Compare distribution to birthday bootstrap.
Related
Files in this repo
- · quantum/nadarasa_g8.py
- · quantum/nadarasa_g8_lib.py
- · src/data/demos/nadarasa_g8.json
- · src/routes/nadarasa.g8.tsx
References