2. 三量子比特重复码的编码与症状提取电路实现

三量子比特重复码的编码与症状提取电路实现

三量子比特重复码把 1 个逻辑量子比特编码为 3 个物理量子比特,逻辑基态定义为 |0L⟩=|000⟩、|1L⟩=|111⟩。编码电路只需两个 CNOT 门:以数据比特 q0 为控制,分别作用于 q1、q2,即可把 α|0⟩+β|1⟩ 映射为 α|000⟩+β|111⟩。症状提取则通过两个辅助比特分别测量 Z0Z1 与 Z1Z2,得到 2 位症状,用于定位单比特 X 翻转错误。

编码电路(制备逻辑态) q0 q1 q2 CNOT(q0→q1) CNOT(q0→q2) 编码后 症状提取电路 q0 q1 q2 a0 a1 a0 测 Z0Z1,a1 测 Z1Z2 症状比特 → 错误位置映射(X 翻转) 症状 s0 (Z0Z1) 症状 s1 (Z1Z2) 错误位置 说明 0 0 无错误 编码空间内,无需恢复 1 0 q0 翻转 仅 Z0Z1 变号 1 1 q1 翻转 两个稳定子同时变号 0 1 q2 翻转 仅 Z1Z2 变号

编码电路的实现与无噪声验证

用 Qiskit 搭建编码电路时,先准备 q0 的任意叠加态,再用两个 CNOT 把信息复制到 q1、q2。无噪声下编码后的态应严格落在 {|000⟩,|111⟩} 张成的编码空间内,可用两个稳定子 Z0Z1、Z1Z2 的期望值均为 +1 来验证。

from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit.quantum_info import Statevector, SparsePauliOp

def encode_circuit(theta=0.7):
    qc = QuantumCircuit(3)
    qc.ry(theta, 0)          # 制备 α|0⟩+β|1⟩
    qc.cx(0, 1)              # CNOT(q0→q1)
    qc.cx(0, 2)              # CNOT(q0→q2)
    return qc

qc = encode_circuit()
sv = Statevector(qc)
print("编码后态:", sv)

# 稳定子期望值验证
for label in ["ZZI", "IZZ"]:
    op = SparsePauliOp(label)
    print(label, "期望值 =", sv.expectation_value(op).real)

预期输出中两个稳定子期望值都等于 1.0(浮点误差内),说明编码态是 Z0Z1 与 Z1Z2 的共同 +1 本征态,即已进入编码空间。

症状提取电路与映射验证

症状提取用两个辅助比特 a0、a1:a0 依次受 q0、q1 控制做 CNOT 后测量,得到 s0 = Z0Z1 的本征值;a1 受 q1、q2 控制,得到 s1 = Z1Z2。为验证映射关系,在编码后人为注入单比特 X 错误,再运行症状提取,检查测量结果是否与上图映射表一致。

def syndrome_circuit(error_qubit=None):
    qc = encode_circuit()
    if error_qubit is not None:
        qc.x(error_qubit)                 # 注入 X 翻转
    qc.add_register(*[])                  # 占位,保持结构清晰
    qc_meas = QuantumCircuit(5, 2)        # q0..q2 + a0,a1
    qc_meas.compose(qc, qubits=[0,1,2], inplace=True)
    # a0 测 Z0Z1
    qc_meas.cx(0, 3); qc_meas.cx(1, 3)
    # a1 测 Z1Z2
    qc_meas.cx(1, 4); qc_meas.cx(2, 4)
    qc_meas.measure([3, 4], [0, 1])
    return qc_meas

sim = AerSimulator()
for err in [None, 0, 1, 2]:
    circ = transpile(syndrome_circuit(err), sim)
    counts = sim.run(circ, shots=1024).result().get_counts()
    print("错误位置:", err, "症状计数:", counts)

无噪声、无错误时,症状应恒为 00;注入 q0 翻转后恒为 10(s0=1,s1=0);q1 翻转为 11;q2 翻转为 01。由于是确定性电路,每种情况 1024 次采样应只出现一个结果键,这正是无噪声一致性验证的判据。

症状比特的位序约定:测量结果字符串按 c1c0 从高到低排列,即 '10' 表示 s1=1、s0=0。若你的后端返回顺序不同,需在解码前统一位序,否则映射表会整体错位。
症状提取电路本身必须保证辅助比特初态为 |0⟩ 且测量后不残留纠缠。若在含噪环境中复用辅助比特,需在测量后加复位或重新制备,否则下一次提取的症状会失真。