Qubitization Walk¶
English · 简体中文
Category C2 · Module
oracq.algorithms.common.transforms· Stage V1
Overview¶
Given a block encoding \(U\) of a Hermitian matrix \(A\), construct the qubitization walk operator
that is, \(U\) acts first, followed by a positive reflection about the \(|0\rangle\) state of the signal register. \(W\) acts as a rotation on the two-dimensional invariant subspace associated with each spectral value \(x\) of \(A\) and is the elementary iteration unit that turns a block encoding into spectral-function transforms (the qubitization construction of Low–Chuang 2019, see ../../development/algorithm-coverage.md A2; for the QSVT framework see Gilyén et al. 2019, arXiv:1806.01838). This page covers only the assembly of the single-step walk operator; the alternating invocations of the phase sequence are covered in QSVT phase sequence.
Interface and input model¶
qubitization_walk(a)
API entry: qubitization_walk
a: aBlockEncoding, the block encoding of the walk matrix (input model BE).
Returns an Operation, with registers target (width a.width) and signal (width a.signal_qubits). Module attributes:
Attribute |
Meaning |
|---|---|
|
|
The normalization alpha of the input BE does not propagate through attributes: the return value is a bare Operation, not a BlockEncoding; the spectral variable \(x\) is defined relative to the input normalization \(\alpha\), i.e. \(x = \lambda/\alpha\).
Implementation notes¶
The generation strategy is two structural calls: invoke hangs the input BE on target | signal, then reflect_zero(b, signal, positive=True) realizes \(2\Pi - I\) (positive=True makes the \(|0\rangle_{\text{signal}}\) branch take \(+1\) and the other branches \(-1\)). Repeated invocations are orchestrated by the caller (such as qsvt_sequence or the low-rank decomposition pipeline); this function builds in no Repeat structure.
Applicability boundary: the input must be a block encoding; sparse oracles or low-rank decomposition outputs must first be adapted into a BE via sparse.py / lowrank.py and the like. The walk operator itself applies no polynomial transform; its spectral properties show up only together with a phase sequence or a projective measurement.
Validation approach¶
Category C2 (approximately continuous semantics; the acceptance criteria are in ../../development/validation-plan.md §2). Current evidence (consistent with 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 protocol and register contracts of the same module’s assembly chain.Numerical:
tests/core/test_qsvt.py:PhaseSynthesisTests.test_convention_matches_qsvt_sequencepins, under random phases, the pointwise agreement between the circuit’s zero-signal block under the same signal/reflection convention andqsp_response(delta = 1e-10); the sequence skeleton that the walk step embeds into is thereby witnessed indirectly.Binding: no independent binding witness (the input already requires a concrete BE).
Known gaps and planned stages¶
No known gaps; the stage V1 witnesses are complete (the sequence convention agrees pointwise to 1e-10). The standalone rotation property of the single-step walk operator (the rotation angle on the two-dimensional invariant subspace) has no direct witness yet and is covered by the sequence-level convention test.
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: matrix_pauli_encoding encodes the 1-bit Hermitian matrix \(A = \begin{pmatrix} 0.5 & 0.3 \\ 0.3 & -0.1 \end{pmatrix}\) (an independent explicit Pauli expansion gives \(\alpha = 0.8\), spectral values \(\lambda/\alpha \approx 0.780, -0.280\)). The full unitary of the walk operator is extracted via OriginIR-ext + UniQC to_matrix and compared element by element with \((2\Pi - I)U\), where \(U\) is the full unitary of the same BE program (also cross-checked against the unitary assembled column by column over basis states on the reference path); the spectral properties are checked independently: the eigenangles of the walk unitary must fall in \(\{\pm\arccos(\lambda/\alpha)\} \cup \{0, \pi\}\), and the zero-signal block must equal \(A/\alpha\).
Case |
Scale |
Backend paths |
Metric |
Value |
|---|---|---|---|---|
|
target 1 + signal 2 (8-dimensional) |
originir-ext + UniQC to_matrix, reference cross-check |
unitary_max_error |
1.7e-16 |
same as above |
— |
— |
be_path_crosscheck (BE unitary deviation between the two paths) |
1.1e-16 |
same as above |
— |
— |
zero_block_max_error (\(\Pi W\Pi\) vs \(A/\alpha\)) |
1.8e-16 |
same as above |
— |
— |
spectrum_max_deviation (eigenangles vs \(\pm\arccos(\lambda/\alpha)\)) |
4.4e-16 |
Reproduction command:
PYTHONPATH=src /path/to/backend/python tests/verification/verify_fourier.py
Artifacts: out/verification/fourier.json.
Numerical validation¶
Experiment design: construct a Hermitian (Householder-type) block encoding \(U=R_y(2\theta)Z\otimes I_{\rm target}\) whose zero-signal block is \(x=\cos(\pi/6)\) (\(\theta=\pi/6\), target/signal one bit each). Three layers of comparison:
Rotation property (closing the gap of “no direct witness for the rotation angle on the two-dimensional invariant subspace”): the walk is repeated \(k=1\ldots4\) times, and the zero-signal probabilities are compared against the Chebyshev closed form \(T_k(x)^2=\cos^2(k\arccos x)\), i.e. the sequence \(0.75,\ 0.25,\ 0,\ 0.25\) (\(k=3\) is an exact zero), on the four backend paths (reference, rir-pysparq, adapter-pysparq, originir-ext);
Unitary decomposition: UniQC
Circuit.to_matrixverifies \(W=(2\Pi-I)U\);Spectrum: the eigenvalues of \(W\) should be \(\mathrm e^{\pm i\pi/6}\) (each of the two target sectors contributes a pair, doubly degenerate).
Case |
Scale |
Paths |
Metric |
Value |
|---|---|---|---|---|
qubitization-walk-chebyshev |
2 qubits, k=1..4 |
4 paths + to_matrix |
max error of zero-signal probability |
5.6e-16 |
ditto |
ditto |
ditto |
\(|W-(2\Pi-I)U|_{\max}\) |
2.1e-16 |
ditto |
ditto |
ditto |
eigenphase error (vs \(\pm\pi/6\)) |
3.3e-16 |
Premise: the \(T_k\) rotation relation requires the BE unitary to be Hermitian; for non-Hermitian \(U\), the correct qubitized iteration must alternate \(U\) and \(U^\dagger\) (the QSVT sequence does exactly that), and plain powers \(W^k\) do not obey Chebyshev — this validation therefore uses a Hermitian construction.
Reproduction command:
PYTHONPATH=src /home/agony/projects/qcfd-dev/quantum-cfd-software/.venv/bin/python tests/verification/verify_search_walks.py
Artifacts: out/verification/search_walks.json (the case qubitization-walk-chebyshev).