3. 校验算符的表示与性质
在稳定子码中,校验算符(stabilizer generator)是定义码空间的核心对象。一个稳定子码 C 由阿贝尔群 S 的一组生成元 {g₁, g₂, …, g_{n−k}} 确定,码空间就是所有被这些生成元同时+1特征化的态所张成的子空间。要真正设计并使用稳定子码,必须先把校验算符"写清楚、算清楚":它如何表示、如何判断两个算符是否对易、如何从一组生成元中剔除冗余,以及生成元的选择如何反过来影响码的参数 [[n, k, d]]。本节围绕这四个问题展开。
一、Pauli串表示:把算符写成"字母表"
n 个量子比特上的 Pauli 群由 I, X, Y, Z 及其张量积构成。忽略全局相位后,任意 Pauli 算符可唯一写成 P = P₁ ⊗ P₂ ⊗ … ⊗ Pₙ,其中每个 Pᵢ ∈ {I, X, Y, Z}。于是我们可以用一个长度为 n 的字符串来记录它,例如 4 比特上的 X ⊗ Z ⊗ I ⊗ Y 记作 XZIY。这就是 Pauli 串表示,它把抽象的算符变成了可直接存储、比较和运算的符号序列。
Pauli 串表示的关键便利在于乘法规则:同一位置上的 Pauli 相乘按 X·Y = iZ、Y·Z = iX、Z·X = iY 等循环关系进行,不同位置互不影响。由于稳定子码只关心"是否对易"和"是否属于同一群",全局相位 ±1, ±i 通常可以丢弃,只保留串本身。实际实现中,一个校验算符常存为两个比特掩码:x 掩码记录哪些位置含 X(Y 也置 1),z 掩码记录哪些位置含 Z(Y 也置 1)。例如 XZIY 对应 x = 1001、z = 0011,这种"双掩码"形式正是下一小节二进制辛表示的雏形。
二、二进制辛表示:让对易性变成线性代数
把每个 Pauli 串映射为长度 2n 的二进制向量 v = (x₁…xₙ | z₁…zₙ),其中 xᵢ = 1 表示第 i 位含 X 或 Y,zᵢ = 1 表示第 i 位含 Z 或 Y。这个映射(忽略相位)是群同构,Pauli 乘法对应向量的模 2 加法。更妙的是,两个 Pauli 算符的对易性可以用一个双线性型直接判定:
v · w = x(v)·z(w) + z(v)·x(w) (mod 2)
v · w = 0 ⇔ P(v) 与 P(w) 对易
v · w = 1 ⇔ P(v) 与 P(w) 反对易
这个式子称为辛内积(symplectic product)。它把"逐位比较 Pauli 字母、数反对易次数"的繁琐过程,压缩成一次按位与再异或的运算。以 XZIY(x=1001, z=0011)与 ZIIX(x=0001, z=1000)为例:x(v)·z(w) = 1001·1000 = 1,z(v)·x(w) = 0011·0001 = 1,和为 0 mod 2,故两者对易。若换成 XII I 与 ZIII,则 1·1 + 0·0 = 1,反对易。工程上,这正是校验矩阵 H = [H_x | H_z] 满足 H_x H_zᵀ + H_z H_xᵀ = 0 的来源——稳定子码的合法性条件被完全代数化了。
上图给出一个 4 比特示例:g₁=XZIY、g₂=ZIIX、g₃=YIXX、g₄=IXZI。可以看到 g₁ 与 g₃ 的辛内积为 1,说明它们反对易,因此这四个算符不能同时作为稳定子生成元——稳定子群要求所有元素两两对易。这正是设计校验算符时最先要做的合法性筛查。
三、对易条件与独立性:从"合法"到"最小"
对易条件是稳定子码的硬约束:所有生成元必须两两辛内积为 0。满足对易后,还要检查独立性。一组生成元若存在非平凡子集其乘积为恒等(模相位),则它们线性相关,实际生成的群维数小于生成元个数。用二进制辛表示看,独立性等价于对应的 2n 维向量在 GF(2) 上线性无关,即校验矩阵 H 的行秩等于生成元个数。
设码长 n、生成元个数 m,则稳定子群维数为 m,码空间维数 k = n − m。因此"最小生成元集"就是秩为 m 的一组基:既不能少(少了群变小、码空间变大、k 变大但纠错能力下降),也不能多(多了含冗余,浪费校验资源且可能引入矛盾)。实际做法是对候选生成元构成的矩阵做 GF(2) 高斯消元,保留主元行即得一组基。例如上例中若 g₃ 恰等于 g₁·g₂(模相位),则 g₃ 应被剔除,最小生成元集只保留 {g₁, g₂},此时 k = 4 − 2 = 2。
GF(2) 上做行化简,而不是在实数域。Pauli 串的乘法是模 2 加法,用错域会得到错误的秩。四、生成元设计如何影响码参数
码参数 [[n, k, d]] 中,n 由物理比特数固定,k 由生成元个数 m 决定(k = n − m),而距离 d 则由稳定子群的具体结构决定:d 是"与所有生成元对易、但不属于稳定子群"的最小权重算符的权重。也就是说,生成元选得不同,即使 n、m 相同,d 也可能不同。
这带来两个设计要点。第一,增加生成元会减小 k、通常增大 d,这是纠错能力与编码效率的权衡;减少生成元则相反。第二,生成元的"形状"(支撑集分布)直接影响 d。若生成元支撑过于集中,可能留下低权重的逻辑算符,使 d 偏小。设计时常用做法是:先确定目标 [[n, k, d]],再构造满足对易与独立性的 H,最后通过枚举低权重算符验证最小距离是否达标。例如目标 [[4,2,2]],取 m = 2 个对易且独立的生成元,若其辛正交补中存在权重 1 的算符,则 d = 1,不满足要求,需调整生成元支撑。
| 设计动作 | 对 k 的影响 | 对 d 的影响 | 注意事项 |
|---|---|---|---|
| 增加独立生成元 | k 减小 | 通常增大 | 须保持两两对易 |
| 剔除冗余生成元 | k 增大 | 可能减小 | 先做 GF(2) 行化简 |
| 调整生成元支撑 | 不变 | 可变 | 避免低权逻辑算符 |
综上,校验算符的设计是一条从"表示"到"约束"再到"参数"的链条:用 Pauli 串和二进制辛向量把算符写清楚,用辛内积筛出对易集合,用 GF(2) 秩确定最小生成元集,最后用生成元个数与结构去匹配目标 [[n, k, d]]。掌握这条链条,才能在后续构造具体稳定子码时做到心中有数、手上有据。