Repetition Codes¶
English · 简体中文
Category C1 · Module
oracq.algorithms.qec.error_correction· Stage V1
Overview¶
Encodes the one-bit logical state \(\alpha|0\rangle + \beta|1\rangle\) into the three-physical-bit repetition code \(\alpha|000\rangle + \beta|111\rangle\) and coherently recovers from any single error of the specified type. error="bit" corrects a single X error; error="phase" is the H-conjugated version of the same code and corrects a single Z error. Encoding and recovery are both purely unitary circuits, with no measurement or reset, so the logical amplitudes (including relative phases) are preserved pointwise across the encode–error–recover cycle.
Interface and input model¶
repetition_encode(*, error="bit")
repetition_recover(*, error="bit")
API entry points: repetition_encode, repetition_recover
error:"bit"or"phase"; the encoder and the recoverer must take the same value; other values raiseValidationErrorat generation time.The input model is CP: there is no oracle input; the error type and the code structure are given as classical parameters.
The two entry points share registers:
target: Bits(1)(the logical bit) andsyndrome: Bits(2); encoding requires thesyndromeinput to be zero. The three physical bits are laid out astarget,syndrome[0],syndrome[1].
Module attributes:
Attribute |
Meaning |
|---|---|
|
|
|
|
|
recoverer only: |
Implementation notes¶
The encoder applies two CNOTs (target → syndrome[0], target → syndrome[1]) to obtain the three-bit repetition; the "phase" variant then applies H to all three physical bits, moving the codewords into the phase-flip basis. The recoverer first XORs target into the two syndrome bits to obtain the syndrome: when the error is on the target bit, both bits are 1, and a controlled X (controlled on syndrome == 3) flips target back to the logical value; when the error is on one of the syndrome bits, the syndrome is not all 1s, and target was never affected. The "phase" variant first applies H back to the bit-flip basis before recovery, reusing the same logic.
Design constraint: after recovery the syndrome deterministically retains the error location (0 when there is no error), but it is not uncomputed back to clean — the host must reset before reusing the registers, which is exactly what the syndrome_policy attribute states. Applicability boundary: only the correction of at most one error consistent with error is guaranteed; two or more same-type errors, or mixed errors, are beyond the three-bit code’s ability.
Validation approach¶
Category C1 (exact discrete semantics; acceptance criterion in ../../development/validation-plan.md §2): the composite action of encode–error–recover must equal the identity operator pointwise on arbitrary logical amplitudes. Evidence:
Structure: construction and attribute assertions in
tests/core/test_algorithm_expansion.py:AlgorithmExpansionTests;test_bad_inputs_fail_at_generationcovers the generation-time violation ofrepetition_encode(error="unknown").Numerical:
AlgorithmExpansionTests.test_repetition_codes_preserve_arbitrary_logical_amplitudes— for botherrorkinds × three physical locations, an arbitrary logical state is prepared with Ry(0.73)/Rz(0.29); after injecting a single error and recovering, thetargetamplitudes are exactly restored to \(e^{-0.145j}\cos 0.365\) and \(e^{0.145j}\sin 0.365\) (places = 10), and the syndrome converges to a single deterministic value.Binding: this algorithm has no independent binding witness (no open declaration entry point).
Known gaps and planned stages¶
No known gaps (the gap column of the validation matrix reads —), stage V1.
Numerical validation¶
Paper-grade numerical experiments are in tests/verification/verify_misc_algorithms.py (the misc_algorithms group), all executed on a real backend.
Experiment design: the arbitrary logical state \(\mathrm{Ry}(0.73)\mathrm{Rz}(0.29)\lvert 0\rangle\) (numpy independently provides the exact amplitudes) goes through “encode–inject–recover” for both error kinds × 4 injection locations (no error / target / syndrome[0] / syndrome[1]): pointwise restoration of the target amplitudes and the deterministic syndrome value (location mapping 0/3/1/2) are checked; in addition, for the error-free encode–recover composite, the syndrome = 0 input block and the leakage are extracted via originir-ext + UniQC Circuit.to_matrix. Backend paths: reference, rir-pysparq, adapter-pysparq, originir-ext (3-qubit full-amplitude cross-check).
Key metrics:
Case |
Scale |
Paths |
Amplitude-restoration error |
syndrome |
unitary block error / leakage |
|---|---|---|---|---|---|
repetition-bit-flip-injection |
3 bits × 4 locations |
four paths |
0 |
all deterministic and equal to the error location ✓ |
— |
repetition-phase-flip-injection |
3 bits × 4 locations |
four paths |
≤ 4.6e-16 |
all deterministic and equal to the error location ✓ |
— |
repetition-bit-encode-recover-unitary |
3 bits |
to_matrix |
— |
— |
0 / 0 |
repetition-phase-encode-recover-unitary |
3 bits |
to_matrix |
— |
— |
4.4e-16 / 2.4e-17 |
Reproduction:
PYTHONPATH=src /home/agony/projects/qcfd-dev/quantum-cfd-software/.venv/bin/python tests/verification/verify_misc_algorithms.py
Artifacts: out/verification/misc_algorithms.json (24 cases all passing; this page corresponds to the four repetition-* cases).