XOR Database¶
English · 简体中文
Category C5 · Module
oracq.algorithms.input_model.oracles· Stage V4
Overview¶
The standard interface for quantum access to classical data: given a query table memory, it implements the paradigm database_xor
where both address and data are bits registers. This XOR semantics is self-inverse under arbitrary initial values and is the common foundation of downstream constructions such as function-table loading, matrix-element lookup, and LCU coefficient tables (QRAM in the input-model vocabulary). The module offers three binding layers — the abstract open declaration, the gate truth table, and the QRAM resource — plus a variant that splits words wider than 64 bits into multiple banks.
Interface and input model¶
abstract_database(name, address_width, data_width)
gate_database(address_width, data_width, table, *, name=None)
qram_database(address_width, data_width, *, name=None)
banked_database(address_width, data_width, *, name="BankedData", abstract=False)
API entry points: abstract_database, gate_database, qram_database, banked_database
abstract_database: an open declaration (the abstract layer for QRAM in the input model) with an empty body; the program closes after an implementation is bound vialinking.bind.gate_database: a truth-table witness.tableis a sparse dictionary or a sequence of words (enumerated by address); addresses and words are range-checked at generation time; each entry flips the data bits controlled by its address.qram_database: declares aQRAM(address_width, data_width)resource (namedtable); at execution time the data is supplied as a memory dictionary and does not enter the IR.banked_database: splitsdata_widthintodata0, data1, ...registers of at most 64 bits and the corresponding QRAM banks (little-endian); withabstract=Trueit yields an open declaration carryinglogical_data_width.
All four entry points return XorDatabase (an OracleView; xor_database() returns itself). Attributes:
Attribute |
Meaning |
|---|---|
|
the underlying |
|
interface bit widths |
|
oracle description (type |
Module attributes: implementation (gate_truth_table / qram), implementation_status; the banked version additionally has logical_data_width and word_order="little_endian_banks".
Implementation notes¶
The gate version applies X bit by bit under address control for each nonzero table word; the gate count grows linearly with the table size, so it suits only small-instance witnessing. The QRAM version externalizes the data as an execution-time resource: only a single query primitive remains in the IR, and under nested calls the resource name is lifted with the module prefix (e.g. db__table). Data tables and gate-level sub-databases are both expanded at generation time and do not enter the IR JSON.
Downstream adaptations: sparse_entry concatenates row|column into a 2w-bit address (see sparse access); diagonal_block_encoding controls a signal Ry by the queried word, encoding the diagonal matrix determined by the angle table; alias_prepare injects the (keep, alt) table through the database parameter (see Alias sampling preparation); the QROM family returns the same XorDatabase interface (see QROM lookup).
Validation approach¶
Category C5 (data-access layer; acceptance criteria in ../development/validation-plan.md §2): pointwise-correct query semantics + three-layer binding consistency + uncomputation. Three layers of evidence:
Structural:
tests/core/test_contracts.py:OracleContractTests.test_aggregate_report_and_kernel_not_executed— when theabstract_databaseinput does not satisfy the protocol contract, the kernel is not executed (the error is located before the algorithm runs);tests/core/test_open_ir.py:OpenIRTests.test_open_roundtrip_and_export_boundary(the open declaration stays unresolved through a serialization round trip, and export is refused).Numerical: the per-address semantics of the gate version serves as the downstream cross-check baseline:
tests/core/test_data_loading.py:DataLoadingTests.test_select_swap_matches_gate_database_per_addressandtest_result_invariant_across_partitions_and_qrom_lookup_baseline(pointwise exact equality over the 16-address table);tests/core/test_qlss_input_models.py:QLSSInputTests.test_signed_sparse_encoding_and_chebyshevcarries matrix elements withgate_databaseand cross-checks the block encoding element by element (places = 11).Binding:
tests/core/test_open_ir.py:OpenIRTests.test_partial_binding_and_lifted_resources(afterqram_databaseis bound viaBinding, the program closes and resource renames are lifted) andtest_shared_capture_has_one_entry_resource(when the same implementation is bound to two slots, a single resource is shared); survival of capability restrictions at the contract layer is covered byOracleContractTests.test_capability_restrictions_survive_annotation_and_wrapping; wide-word splitting is covered bytests/core/test_workloads.py:WorkloadTests.test_banked_words_do_not_violate_register_storage_width(a 96-bit word splits into 64+32 with exactly two resources after closing).
Known gaps and planned stages¶
Three-binding consistency parameterization (to be rolled out in V4): the gate / QRAM (and downstream variant) bindings of the same abstract declaration do not yet have unified parameterized cross-checks; each binding is currently witnessed independently. Consistent with the oracles.py row of validation-coverage.md.
Numerical validation¶
Paper-level numerical validation script: tests/verification/verify_oracles.py (group-A cases), artifact out/verification/oracles.json.
Experiment design: the gate truth table exhausts the entire input domain in two modes — pointwise over basis states (each of the \(2^{a+d}\) \((a,d)\) initial states runs once, asserting the output is exactly the single basis state \(|a,\,d \oplus table[a]\rangle\)) and full superposition (address/data both Hadamard-transformed, one run covers all branches, cross-checked amplitude by amplitude against the classical permutation). The QRAM binding runs the same superposition exhaustion with an execution-time memory dictionary, plus spot checks of basis states with nonzero data initial values. The dual-binding consistency cases bind the same abstract_database open declaration to the gate and QRAM implementations respectively and cross-check the three execution results pairwise — i.e. the first round of numerical evidence for the three-binding consistency parameterization (V4) in “Known gaps” above. Backend paths: reference (the built-in reference executor), rir-pysparq (the PySparQ native RIR interpreter), adapter-pysparq (the oracq event adapter), originir-ext (UniQC full-amplitude state vector).
Case |
Scale (address×data) |
Paths |
Metric values |
|---|---|---|---|
xor-gate-basis-2x3 |
2×3, 32 initial states |
reference, rir-pysparq, originir-ext |
failures = 0 |
xor-gate-basis-3x2 |
3×2, 32 initial states |
reference, rir-pysparq |
failures = 0 |
xor-gate-superposition-2x3 |
2×3, 32 branches |
all four paths |
max_error = 5.6e-17 |
xor-gate-superposition-3x4 |
3×4, 128 branches |
all four paths |
max_error = 4.2e-17 |
xor-gate-superposition-4x3 |
4×3, 128 branches |
all four paths |
max_error = 4.2e-17 |
xor-qram-superposition-3x4 |
3×4, 128 branches |
all four paths |
max_error = 4.2e-17, basis_failures = 0 |
xor-abstract-binding-consistency-3x2 |
3×2, gate/qram dual binding |
reference, rir-pysparq, originir-ext |
max_error = 5.6e-17 |
Reproduction command:
PYTHONPATH=src /path/to/backend/python tests/verification/verify_oracles.py
Artifact path: out/verification/oracles.json.