4. Shor码编码电路原理与仿真实现

Shor九比特码的核心思想,是把一个逻辑量子比特拆分成三组、每组三个物理量子比特:先用相位翻转码把 |ψ⟩ = α|0⟩+β|1⟩ 编码成三个比特的相位保护结构,再对每个比特做比特翻转码的重复编码,最终得到九个物理比特。理解这一点的关键,不在于记住“九”这个数字,而在于看清编码电路里 Hadamard 门与 CNOT 门的排列顺序,以及它们如何把单比特信息逐步“摊开”成纠缠态。

先约定本文的比特编号与门的作用方向:九个物理比特记为 q0~q8,其中 q0、q3、q6 分别是三组内的“数据位”,q1、q2 保护 q0,q4、q5 保护 q3,q7、q8 保护 q6。CNOT 一律以左侧为控制位、右侧为目标位。所有图示与文字均遵循这一约定。

编码电路的两级结构

Shor码编码电路可以拆成两个层次。第一层是相位翻转码:对初始数据位 q0 施加 H 门,再以 q0 为控制位、q3 和 q6 为目标位各施加一个 CNOT。这一步把 α|0⟩+β|1⟩ 变成 α|000⟩+β|111⟩ 的“三比特 GHZ 型”结构,它保护的是相位错误——因为三个比特同时翻转相位时,逻辑态的相对符号不变。第二层是比特翻转码:对 q0、q3、q6 各自再复制出两个比特,即用 CNOT 把 q0 复制到 q1、q2,把 q3 复制到 q4、q5,把 q6 复制到 q7、q8。复制完成后,九个比特处于一个高度纠缠的叠加态,任何单个比特的比特翻转或相位翻转都能通过后续的综合征测量定位并纠正。

Shor码编码电路:相位翻转码 + 比特翻转码 第一级:相位翻转码(H + CNOT) 第二级:比特翻转码(三组 CNOT 复制) q0 q1 q2 q3 q4 q5 q6 q7 q8 H 编码后纠缠态 α|000000000⟩ + β|111111111⟩ (三组 GHZ 型 重复结构) 可纠正任意 单比特 X/Z 错误 相位翻转码 CNOT 比特翻转码 CNOT Hadamard 门

在仿真环境中逐步构建

以 Qiskit 为例,编码电路的构建可以按“先相位、后比特”的顺序逐段加入,便于在每一步观察态矢量的变化。下面给出可直接运行的示例代码,参数与结果均为教学示例,实际运行数值会因模拟器版本略有差异。

from qiskit import QuantumCircuit, Aer, execute
from qiskit.quantum_info import Statevector

qc = QuantumCircuit(9)

# 第一级:相位翻转码
qc.h(0)          # 数据位进入叠加
qc.cx(0, 3)      # 复制到 q3
qc.cx(0, 6)      # 复制到 q6

# 第二级:比特翻转码(三组重复)
qc.cx(0, 1); qc.cx(0, 2)   # 保护 q0
qc.cx(3, 4); qc.cx(3, 5)   # 保护 q3
qc.cx(6, 7); qc.cx(6, 8)   # 保护 q6

print(qc.draw())
sv = Statevector.from_instruction(qc)
print(sv.probabilities_dict())

运行后,态矢量应只包含 |000000000⟩ 与 |111111111⟩ 两个基态,概率各约 0.5(若初始态为 |0⟩,则只有前者概率为 1)。这是判断编码是否成功的第一条依据:九个比特的测量结果必须完全一致,即要么全 0、要么全 1,不能出现“部分 0 部分 1”的基态。若出现如 |000100000⟩ 这样的项,说明某条 CNOT 的控制位或目标位接错,或复制链没有闭合。

验证纠缠态的三项检查

仅看概率分布还不够,因为 |000000000⟩ 与 |111111111⟩ 的等权叠加也可能是九个独立比特的直积态。要确认真正的纠缠,需要做以下检查。第一,检查约化密度矩阵:对任意一个比特求偏迹,得到的单比特密度矩阵应为完全混合态 I/2,这是最大纠缠的标志。第二,检查关联性:测量 q0 与 q8,结果应 100% 相同;测量 q0 与 q1 也应 100% 相同。第三,检查相位结构:在 q0 上再施加一次 H 门并测量,应能以接近 1 的概率得到 |0⟩,这验证了第一级 H 门与后续 CNOT 构成的相位保护结构没有被破坏。

仿真时建议把编码电路与“错误注入 + 纠错”电路分开搭建。先单独验证编码后的态矢量,再在编码与解码之间插入 X 门或 Z 门模拟单比特错误,观察综合征测量结果是否指向正确的出错位置。这样能把“编码是否正确”与“纠错是否有效”两个问题解耦,排错效率更高。

常见构建错误与判断依据

实际搭建时最容易出错的地方有三处。其一是 CNOT 方向写反:把 q3 当作控制位、q0 当作目标位,会得到不同的纠缠结构,态矢量中会出现 |011⟩ 类项而非 |000⟩/|111⟩。其二是复制链顺序错误:第二级的 CNOT 必须在第一级全部完成之后施加,若把 q0→q1 的复制提前到 q0→q6 之前,q1 不会继承 q6 的关联,最终态不再是九比特 GHZ 型。其三是遗漏 H 门:没有 H 门时,q0 处于 |0⟩,整个电路输出确定态 |000000000⟩,概率分布看似“干净”,但完全不具备相位保护能力,此时对 q0 施加 Z 门后态不变,说明编码失效。

判断编码是否达标的实用标准可以归纳为:态矢量只含全 0 与全 1 两个基态;任意两比特测量结果完全关联;单比特偏迹为最大混合态;在 q0 上注入 Z 错误后,逻辑态的相对相位发生改变但比特值分布不变,这正是相位翻转码应当表现出的行为。满足这四条,才说明九比特纠缠态构建正确,可以进入后续的纠错与解码仿真环节。