Oblivious Amplitude Amplification¶
English · 简体中文
Category C2 · Module
oracq.algorithms.common.transforms· Stage V1
Overview¶
Applies oblivious amplitude amplification (OAA) to a block encoding \(U\): an iterative boost of the zero-signal block amplitude that does not rely on knowledge of the initial state. With \(\Pi = |0\rangle\langle 0|_{\text{signal}} \otimes I_{\text{target}}\) and \(R = I - 2\Pi\), the operator with \(m\) iterations is
(\(m=1\) is the standard three-query form \(U\,R\,U^\dagger R\,U\) from the literature; the two global minus signs of \(R\) relative to \(2\Pi - I\) cancel). For an input whose zero-signal block is \(V/2\) (\(V\) a partial isometry), the zero-signal block of \(W_m\) is \((-1)^m \sin\!\big((2m+1)\theta\big)\, V\) (\(\sin\theta = 1/2\)) — the magnitude evolves along the standard OAA narrative \(\sin\theta \to \sin 3\theta \to \cdots\), and a single iteration restores the amplitude to \(O(1)\). General block encodings satisfy the Chebyshev identity \(\Pi W_1 \Pi = B\,(4B^\dagger B - 3I)\). This construction is the standard companion component of the qubitization framework (framework reference: Gilyén et al. 2019, arXiv:1806.01838; for walk-operator background see qubitization walk).
Historical defect record: versions before 2026-09 assembled \([R\,U^\dagger R\,U]^m\) (missing the trailing \(U\)), degenerating the zero-signal block to \(2B^\dagger B - I\) and performing no amplification; it was found by a validation round and fixed to the formula above, then pinned by the “library operator = standard sequence” regression case below — see Numerical validation.
Interface and input model¶
oblivious_amplification(a, iterations=1)
API entry point: oblivious_amplification
a: aBlockEncoding, the block encoding being amplified (input model BE).iterations: the iteration count, default 1.
Returns an Operation (a bare operation, not a BlockEncoding), with registers target (width a.width) and signal (width a.signal_qubits). Module attributes:
Attribute |
Meaning |
|---|---|
|
|
BE normalization is not propagated through attributes; the semantics of the amplified amplitude are interpreted by the caller.
Implementation notes¶
The program’s time order is: invoke first mounts the input BE (the initial \(U\)), then each iteration makes four structural calls: reflect_zero(signal) (default positive=False: the signal-zero branch takes \(-1\) and the other branches take \(+1\), i.e. \(R = I - 2\Pi\)) → adjoint invoke → reflect_zero(signal) again → the trailing invoke. The iteration count is expressed through the IR’s Repeat structure and is not unconditionally expanded during generation or text serialization.
Applicability boundary: the input must be a block encoding. The amplification guarantee relies on the structural assumption that “the zero-signal block is close to a \(1/2\)-scaled partial-isometry operator”, which this function does not check; iterating a block encoding whose normalization is far from \(1/2\) does not converge in the OAA sense and must first be adjusted by scaling or LCU composition.
Validation approach¶
Category C2 (approximate continuous semantics; acceptance criterion in ../../development/validation-plan.md §2). Current evidence (matching the transforms.py row of the validation coverage matrix):
Structure:
tests/core/test_algorithm_protocols.py:AlgorithmProtocolTests.test_trotter_protocol_keeps_phase_and_repeatandtest_trotter_only_input_does_not_need_block_encodingcover the protocols and register contracts of the same module’s assembly chain (including same-kind assertions that the Repeat structure is preserved).Numerical:
tests/core/test_qsvt.py:PhaseSynthesisTests.test_convention_matches_qsvt_sequencepins the signal/reflection convention shared by this module (delta = 1e-10); OAA and the qubitization walk share theinvoke+reflect_zerocomponents and are thereby covered indirectly.Binding: no independent binding witness (the input already requires a concrete BE).
Known gaps and planned stages¶
No known gaps (matching the transforms.py row of the validation coverage matrix), stage V1. The amplification semantics have an independent numerical witness: the \(V/2\) fixture goes from magnitude \(0.5 \to 1.0\) in one iteration (\(\sin 3\theta\)); the Chebyshev identity for general blocks and the “library operator = standard sequence” regression pin are in Numerical validation.
Numerical validation¶
Paper-grade numerical experiments are in tests/verification/verify_fourier.py (real-backend execution, no mock substitutes). The input BE is a small gate-level bound instance. Assembly correctness: the full unitary for iterations \(it = 1, 2, 3\) is extracted via OriginIR-ext + UniQC to_matrix and compared element by element with \(U\,[R\,U^\dagger R\,U]^{it}\) (\(R = I - 2\Pi\)). Behavioral measurement: a minimal gate-level instance whose zero-signal block is exactly \(X/2\) is built (the “\(V/2\)” fixture with \(\sin\theta = 1/2\)); after one iteration the zero-signal block magnitude recovers to \(1.0\) (\(-\!X\), i.e. \((-1)^1\sin 3\theta \cdot X\)), and \(it = 2, 3\) give \(0.5\) and \(0.5\) (\(\sin 5\theta\), \(\sin 7\theta\)) — the magnitudes agree step by step with the standard three-query OAA narrative, and the global sign \((-1)^{it}\) is recorded as an informational metric (observable at the unitary level, indistinguishable at the measurement level).
Case |
Scale |
Backend path |
Metric |
Value |
|---|---|---|---|---|
|
8-dimensional, 1 iteration |
originir-ext + UniQC to_matrix |
max_error |
2.3e-16 |
|
8-dimensional, 2 iterations (Repeat structure) |
originir-ext + UniQC to_matrix |
max_error |
4.4e-16 |
|
8-dimensional, 3 iterations (Repeat structure) |
originir-ext + UniQC to_matrix |
max_error |
4.6e-16 |
|
zero block = \(X/2\) fixture |
originir-ext + UniQC to_matrix |
zero block vs \(-\sin 3\theta\,X\) |
6.1e-17 |
|
same as above (Repeat structure) |
originir-ext + UniQC to_matrix |
zero block vs \(\pm\sin 5\theta\,X\), \(\sin 7\theta\,X\) |
8.9e-16 / 1.1e-15 |
Reproduction command:
PYTHONPATH=src <interpreter with pysparq+uniqc> tests/verification/verify_fourier.py
Artifacts: out/verification/fourier.json.
Supplementary validation: Chebyshev identity for general blocks and the standard-sequence regression pin (verify_hamiltonian.py)¶
tests/verification/verify_hamiltonian.py (27 cases, all PASS) provides two complementary pieces of evidence that corroborate the measurements of the fourier group above: first, for a general non-isometric block (\(2\times2\) matrix BE, \(B = \Pi U \Pi = A/\alpha\)) it verifies the Chebyshev amplification identity of the library operator \(W_1 = U\,R\,U^\dagger R\,U\), \(\Pi W_1 \Pi = B\,(4B^\dagger B - 3I)\), on the three paths reference / rir-pysparq / originir-ext (max_error 3.6e-16); second, it independently assembles the literature’s standard sequence from the library’s public components (invoke + reflect_zero + adjoint) and exactly recovers \(-V\) on the zero-signal block of the \(V/2\) fixture (\(V = R_z(0.4)R_y(0.9)\)) (max_error 1.1e-16), with the target amplitude amplified from 0.4502 to 0.9004 (exactly ×2.0), and the library operator and the script-assembled standard sequence agree amplitude by amplitude on all three paths (library_vs_script_error = 0.0) — this is the regression pin for “library = standard three-query sequence”, preventing a regression to the historical defect that missed the trailing \(U\) (that defect was found and fixed by a validation round; see the historical record in the overview above).
Case |
Scale |
Backend paths |
Metric |
Value |
|---|---|---|---|---|
|
general block, 1 iteration |
reference, rir-pysparq, originir-ext |
Chebyshev identity max_error |
3.6e-16 |
|
\(V/2\) fixture, \(URU^\dagger RU\) |
reference, rir-pysparq, originir-ext |
max_error vs \(-V\) |
1.1e-16 |
same as above |
— |
— |
per-amplitude deviation, library vs script assembly |
0.0 |
same as above |
— |
— |
amplitude amplification (×2.0) |
0.4502 → 0.9004 |
Reproduction command:
PYTHONPATH=src <interpreter with pysparq+uniqc> tests/verification/verify_hamiltonian.py
Artifacts: out/verification/hamiltonian.json.