# Quantum algorithm implementation validation plan (review draft)
**English** · 简体中文
This document systematically plans oracq's algorithm validation system: it
first classifies all algorithms by "how correctness is judged", then
prescribes a standard witness technique for each class, and finally gives the
all-algorithm validation matrix and an implementation roadmap. Review focus:
whether the classification in section 2 is complete, whether the cross-cutting
mechanisms in section 4 deserve infrastructure investment, and the stage
split and priorities of section 5.
## 1. General validation principles
- **What is validated is the semantics of RIR programs.** Algorithms are
generators; witnesses must act on the generated program (executed through
the reference simulator or a real backend), not on the generator's internal
data structures.
- **At least three layers of evidence per algorithm**: structural validity
(IR checks, signatures, contract properties), small-scale numerical
witnesses (the reference simulator cross-checked against analytic solutions
or classical references), and bindability (abstract declarations keep their
semantics after being bound via bind).
- **Three-layer input-model consistency** is this repository's distinctive
invariant: the abstract / gate / qram bindings of the same algorithm must
produce consistent observable semantics (QRAM word-width quantization error
is allowed, with an error bound stated).
- **Determinism first**: probabilistic assertions must operate at the
distribution level (closed-form expectations, support, moments); single
sample threshold assertions are forbidden; simulations must use fixed seeds
or exact state vectors.
- The existing layering is kept: L0 static checks (ruff, layout,
documentation warnings-as-errors) → L1 structure → L2 numerical witnesses
(tests/core) → L3 cross-check catalog (applications/catalog.py) → L4 real
backends (tests/integration, cross-checked on real uniqc/pysparq machines,
no mocks) → L5 documentation doctests.
## 2. Algorithm classification (by how "correct" is judged)
| Class | Acceptance criterion | Standard witness technique | Main risk |
|---|---|---|---|
| C1 exact discrete semantics | Output distribution / action unitary **equal pointwise** to a truth table or exact construction | Exhaustive all-input cross-checks on small instances; the unitarity identity W†W=I; exact recovery of null spaces / secret strings | Essentially no flakiness |
| C2 approximate continuous semantics | Action operator ≈ the target continuous function, with an explicit error bound | Compare within tolerance against classical references (analytic solutions / matrix exponentials / high-precision numerics); **convergence scans**: fit error vs degree/κ/Δt to the theoretical rate | Tolerance choice masking systematic error; numerical ill-conditioning (e.g. high-degree QSP synthesis) |
| C3 probability-distribution semantics | The output **distribution** equals the closed-form expectation (mean, variance, support) | Derive the distribution from exact state vectors and cross-check per-outcome probabilities against closed forms (Krawtchouk/binomial etc.); for QAE-style algorithms, verify the estimate falls inside the theoretical confidence interval | Sampling jitter → sample assertions forbidden, exact distributions only |
| C4 heuristic/optimization semantics | Strictly better than a random baseline, and small instances reach known optima / theoretical scores | Distribution-level comparison against the expectation of random guessing; exhaustive-optimum cross-checks on small instances; cross-checks of the theoretical score formulas | Boundary-assertion jitter (happened once for the C3-class DQI: assertGreater failed when exactly equal to the baseline) |
| C5 data-access layer | Pointwise-correct query semantics + three-layer binding consistency + uncomputation | Per-address truth-table cross-checks; abstract/gate/qram triple-binding consistency; LocalExit-enforced uncomputation checks; marginal-distribution checks for superposed queries | QRAM quantization error needs an explicit bound |
| C6 composition skeleton | Component contracts satisfied + correct end-to-end semantics on small instances + bind invariance | End-to-end simulation + identical results before and after binding + structural-property checks (register layout, Repeat not expanded) | Components individually correct but composed semantics misaligned (register-mapping errors) |
## 3. All-algorithm validation matrix
Status: ✅ adequately witnessed; 🟡 witnessed but with gaps; ❌ no witness.
Modules are listed by layer.
### infrastructure / data-access layer (C5)
| Module | Contents | Status | Gaps and plans |
|---|---|---|---|
| oracles.py | XorDatabase, StatePreparation, SparseAccess, BlockEncoding across three layers | ✅ | Add a parametrized "triple-binding consistency" test (cross-check the same declaration binding by binding); each binding is currently witnessed independently |
| data_loading.py | QROM / Select-Swap | ✅ | Resource formulas already cross-checked; consider adding {obj}`qrom_cost ` to catalog report attributes |
| mathfunc/ | Classical functions → reversible circuits | ✅ | Add an explicit witness for the fixed-point quantization error bound |
| prepare_select.py | PREPARE/SELECT, alias | ✅ | alias's clean_work=False is honestly documented; add alias triple-binding consistency |
### Exact discrete algorithms (C1)
| Module | Algorithms | Status | Gaps and plans |
|---|---|---|---|
| oracle_algorithms.py | DJ/BV/Simon | ✅ | — |
| fourier.py | QFT, QFT addition | ✅ | — |
| arithmetic.py | Fixed-point add/sub/mul, Boolean networks | ✅ | — |
| number_theory.py | Modular multiplication, order finding | ✅ | The small-scale witnesses already note they do not extrapolate to full Shor |
| error_correction.py | Repetition codes | ✅ | — |
| walks.py | Coined cycle walk | ✅ | — |
| graph_walks.py | Adjacency oracle, Szegedy, MNRS | ✅ | The cycle's failure has been verified as a theoretical result; adding Johnson graphs requires new witnesses (element distinctness) |
### Approximate continuous algorithms (C2)
| Module | Algorithms | Status | Gaps and plans |
|---|---|---|---|
| transforms.py | Qubitization walk, QSVT sequence, OAA | ✅ | The sequence conventions are pinned by qsvt.py (pointwise agreement 1e-10) |
| qsvt.py | Phase synthesis, inversion, filtering, HS simulation, fixed-point search | ✅ | **Convergence scans missing**: batch curves of error vs degree/κ are not automated; the ill-conditioned synthesis-degree boundary (≳16) already has negative-case coverage: tests/core/test_qsvt.py:PhaseSynthesisTests.test_input_validation and TransformWitnessTests.test_transform_input_validation (covering parity violations, \|coeff\|>1, unsaturated endpoints, imaginary-part parity, ill-conditioned κ, degree 0, t=0, Δ≥1, odd/even degree violations, and similar scenarios) |
| hamiltonian.py | Trotter, Taylor, hamsim | ✅ | Trotter order-error-rate scans not done |
| sparse.py / block_encoding.py | Sparse BE, BE algebra | ✅ | — |
| qlss.py | CKS, Costa | 🟡 | Paradigm witnesses exist; missing an end-to-end cross-check case against the HHL paper's reference values (could enter the catalog) |
| ode.py / lchs.py / cbmd.py / schrodingerization.py / carleman.py | ODE/PDE solvers | 🟡 | Each has witnesses; missing a unified "analytically solvable ODE family" convergence benchmark (the same problem through all solvers) |
| sde.py | Fokker–Planck | ✅ | OU-moment cross-checks; add an end-to-end catalog case for the SDE solver and LCHS |
| density.py | Purification, Gibbs | ✅ | Convergence scans added: tests/core/test_density.py:GibbsTests.test_error_convergence_decreases (error ∈ {0.4,0.2,0.1} monotone non-increasing + each step ≤ error, measured 5.6e-4/8.7e-5/8.7e-5) and test_error_bound_uniform_in_beta (β ∈ {0.2,0.5,1.0} grid, each point ≤ 0.1) |
| lowrank.py | DF/THC → BE | ✅ | α upper-bound tightness added: tests/core/test_lowrank.py:DoubleFactorizationTests.test_alpha_matches_closed_form_eigenvalues (independent 2×2 closed-form cross-check, places=10), test_df_alpha_tighter_than_pauli (DF α=1.4 ≤ Pauli α=1.5); ThcTests.test_thc_alpha_matches_hand_computed_bound (THC α=1.996 independent hand computation) |
### Probability-distribution algorithms (C3)
| Module | Algorithms | Status | Gaps and plans |
|---|---|---|---|
| estimation.py | QPE, QAE, quantum counting, Hadamard/SWAP test | ✅ | The QAE confidence-interval claim is unwitnessed (only the point estimate is verified) |
| search.py | Grover, amplitude amplification | ✅ | — |
| integration.py | Heinrich summation/integration | ✅ | Closed-form mean cross-check + heinrich_rate parametric validation already witnessed (tests/core/test_integration.py:SumPreparationTests / QuantumSumTests / RateTests) |
| gradient.py | Jordan gradient | ✅ | Exact on linear + perturbed convergence already witnessed (tests/core/test_gradient.py:GradientTests.test_perturbed_linear_concentrates_with_grid_bits includes the failure-probability decay rate q_{m+1} ≤ 0.34·q_m) |
| qpca.py | QPCA, density-matrix exponentiation | ✅ | Eigenvalue readout peak cross-check + Δt first-order error rate already witnessed (tests/core/test_qpca.py:DensityMatrixExponentiationTests / QpcaTests) |
### Heuristic/optimization algorithms (C4)
| Module | Algorithms | Status | Gaps and plans |
|---|---|---|---|
| variational.py | QAOA-MaxCut, VQE, ansatz | ✅ | One-sided witness; add the strong witness of "reaching the optimal cut on small instances" |
| dqi.py | DQI | ✅ | Pointwise distribution cross-check against closed forms (Krawtchouk); the identity-decoder baseline assertion was fixed to allow boundary equality |
### Application layer
| Module | Contents | Status | Gaps and plans |
|---|---|---|---|
| qfvm.py / qham/ | QFVM, QHAM | ✅ | Catalog cross-checks already exist |
| catalog.py / gallery.py | 33-case cross-check catalog | ✅ | New algorithms (qsvt inversion, graph_walks search, data_loading, integration, qpca) not yet registered |
## 4. Cross-cutting validation mechanisms (infrastructure investments)
1. **Invariant test library** (new proposal, tests/core/witness.py or similar):
- `assert_unitary(program)`: W†W=I on the reference simulator (sampled
basis states).
- `assert_uncomputation(program, work_regs)`: work-qubit restoration
(reusing the LocalExit mechanism).
- `assert_bind_invariant(abstract_program, bindings)`: the bindings of the
same open declaration produce consistent semantics (error bound
parameterized).
- `assert_block_equals(be, matrix, alpha)`: cross-check of the BE's (0,0)
block.
Benefit: witnesses for new algorithms go from "each hand-rolls its own" to
declarative composition, with a unified regression yardstick.
2. **Determinism policy** (codified): every probabilistic assertion must be a
closed-form cross-check against the exactly simulated distribution; when
the theoretical value lands exactly on the assertion boundary, use ≥/≤
with a numeric tolerance — strict inequalities are not allowed (the DQI
boundary case was fixed this way).
3. **Convergence-scan framework**: provide parameter-scan tooling for C2
algorithms (error vs degree/κ/Δt), asserting the fitted slope ≥ a lower
bound on the theoretical rate; store results as JSON for validation.json
to aggregate.
4. **Resource-estimation cross-checks**: for every module providing a cost
function (qrom_cost, the QSP degree formula, Trotter step counts), the
generated program's structural properties must agree with the cost formula
(checked in both directions).
5. **Catalog registration rule**: once a new algorithm is finished it must
register catalog cases (gate/qram input variants) and be wired into the
real-backend cross-checks of tests/integration (no mocks).
## 5. Implementation roadmap
| Stage | Scope | Prerequisite |
|---|---|---|
| V1 | Invariant test library (4 assertion primitives) + witnesses for the in-flight modules (density/gradient/lowrank/integration/qpca) filled in per the matrix (done, 0.x iteration) | None |
| V2 | Convergence-scan framework + convergence benchmarks for the qsvt/hamsim/ODE solvers wired into validation.json | V1 |
| V3 | Register the new algorithms in the catalog (qsvt inversion, MNRS search, Select-Swap, Heinrich integration, QPCA) + extend the real-backend cross-checks in tests/integration | V1 |
| V4 | Roll out triple-binding consistency parametrized tests (oracles/prepare_select/graph_walks/data_loading) | V1 |
## 6. Relation to existing acceptance
`validation.md` / `validation.json` remain the per-version acceptance records;
once this plan lands, the V1–V4 deliverables are written into them by
version. The algorithm coverage workboard (algorithm-coverage.md) records
"what is implemented" while this document records "how correctness is
proven"; the two correspond line by line.