本文基于物理直觉,一步一步来找到表面码的自由度。
核心问题是:约束会"吃掉"自由度,但约束之间也可能互相打架导致"死锁"。表面码的精髓是找到一种几何安排,让约束吃得刚好,不多不少,留下恰好1个自由度。
阶段 0:1 个裸量子比特
[●]
- 物理比特:1
- 约束:无
- 自由度:1
- 图像:一枚硬币,可以正面朝上、反面朝上、或正反叠加。完全自由。
阶段 1:2 个比特,"胶水"粘住(Z 方向)
[●]------[●] (胶水:两枚硬币必须同向,Z₁Z₂ = +1)
- 物理比特:2
- 约束:1 个(Z 方向)
- 自由度:1
- 图像:两枚硬币被一根绳子绑成同向。要么都朝上(|00⟩),要么都朝下(|11⟩)。我们仍然可以存 1 比特的信息(整体 flipping),只是用了两枚硬币来存。
- 代价:X 方向上,单独翻一枚硬币会扯断绳子(推出代码空间)。只能两枚一起翻(X₁X₂)。
阶段 2:4 个比特,围成 Z-环
[●]------[●]
| |
[●]------[●]
(每对邻居都被 Z-胶水绑住,4 条胶水,但只有 3 条独立)
- 物理比特:4
- 独立约束:3
- 自由度:4 - 3 = 1
- 图像:4 枚硬币围成一圈,全被 Z-绳子绑成同向。整个环只能"全上"或"全下"。
- ∣ψL⟩=α∣0000⟩+β∣1111⟩|\psi_L\rangle=\alpha|0000\rangle + \beta |1111\rangle∣ψL⟩=α∣0000⟩+β∣1111⟩ ,其中 ∣α∣2+∣β∣2=1|\alpha |^2+|\beta|^2 =1∣α∣2+∣β∣2=1,相当于一个逻辑 qubit。
- 关键观察:加了 2 枚硬币,加了 2 条约束,自由度没变(还是 1)。
阶段 3:再加一圈 X-绳子------"死锁"!
[●]═══[●]
║ + ║ (外圈再用 X-绳子捆一圈:X₁X₂X₃X₄ = +1)
[●]═══[●]
- 物理比特:4
- 总独立约束:3(Z) + 1(X) = 4
- 自由度:4 - 4 = 0
- 图像:Z-绳子把硬币锁成同向环,X-绳子又从外围捆了一圈。两股垂直的绳子把所有自由度全部吃光。
- ∣ψL⟩=α∣0000⟩+β∣1111⟩|\psi_L\rangle=\alpha|0000\rangle + \beta |1111\rangle∣ψL⟩=α∣0000⟩+β∣1111⟩ ,其中 α=β=2/2\alpha =\beta =\sqrt{2}/2α=β=2 /2,st Z1Z2Z3Z4∣ψ⟩=+1∗∣ψ⟩,X1X2X3X4∣ψ⟩=+1∗∣ψ⟩Z_1Z_2Z_3Z_4|\psi\rangle =+1*|\psi\rangle, X_1X_2X_3X_4|\psi\rangle = +1*|\psi\rangleZ1Z2Z3Z4∣ψ⟩=+1∗∣ψ⟩,X1X2X3X4∣ψ⟩=+1∗∣ψ⟩
- 结果:系统被锁死到唯一的量子态,什么也存不了。这就是"过约束"(over-constrained)。
阶段 4:打破死锁的两种方式
4 个比特、4 个约束,自由度为 0。要获得自由度,有两个选择:
选择 A:挖掉一个约束("挖洞")
- 把外圈的 X-绳子剪断一个缺口
- 约束从 4 降到 3
- 自由度回到 1
- 这就是之前回答过的"挖洞释放自由度"
选择 B:增加物理比特,但不增加那么多约束("摊薄"约束)
选择 B 才是构建平面码的正路。
阶段 5:从"环"变"网"------摊薄约束
不再让 4 个硬币围成紧凑的环,而是把它们拉开,放到一个更大的"骨架"上:
S────S S = 光滑边界(上下边缘)
| |
● ● ● = 顶点(放 Z-约束的位置)
| f₁ | f₂ f = 面(放 X-约束的位置)
R ────●────●──── R R = 粗糙边界(左右边缘)
| f₃ | f₄
● ●
| |
S────S
这是 2×2 的面阵列 (距离 d=2 的标准平面码)。骨架搭好后,把数据比特放在"边"上(边模型):
●──e₁──●──e₂──●
│ f₁ │ f₂ │
e₃ e₄ e₅
│ │ │
●──e₆──●──e₇──●
│ f₃ │ f₄ │
e₈ e₉ e₁₀
│ │ │
●──e₁₁─●──e₁₂─●
- 数据比特(边):e₁ 到 e₁₂,共 12 个
- Z-约束(顶点星算符):9 个顶点,但有 1 个全局依赖 → 8 个独立
- X-约束(面面算符):4 个面 → 4 个独立
- 总约束:12
- 自由度:12 - 12 = 0(又是死锁!)
为什么还是死锁?因为这是"裸"平面,没有处理边界。
阶段 6:关键一步------打开边界!
平面码的天才之处:不要对所有顶点都施加 Z-约束。
去掉两个对角角落的星算符:
[角₁]──e₁──●──e₂──[角₂] 角₁和角₂的Z-约束被移除
│ f₁ │ f₂ │
e₃ e₄ e₅
│ │ │
●──e₆───●──e₇───●
│ f₃ │ f₄ │
e₈ e₉ e₁₀
│ │ │
[角₃]──e₁₁─●──e₁₂─[角₄] 角₃和角₄保留Z-约束
现在:
- Z-约束:9 - 1(全局依赖) - 1(去掉的角) = 7 个独立。
标准处理:去掉一个角 的星算符,以及调整粗糙边界上的约束。
对于标准光滑-粗糙边界:
- 上下边界是光滑的:保留所有上下边界顶点的星算符
- 左右边界是粗糙的:去掉左右边界顶点的星算符,或缩短它们
简化计数:
- Z-约束独立数:7 个
- X-约束独立数:4 个
- 总约束:11
- 数据比特:12
- 自由度:12 - 11 = 1
阶段 7:直觉图像------为什么打开边界就多了 1 个自由度?
S────────S ← 上光滑边界:Z-错误可以"停靠"
│ │
R ●────────● R ← 左右粗糙边界:X-错误可以"停靠"
│ 网 │
│ 格 │
R ●────────● R
│ │
S────────S ← 下光滑边界:Z-错误可以"停靠"
未打开边界前(裸平面):
- Z-错误链不管怎么跑,要么形成闭合环(被稳定子检测到),要么撞墙(边界也是约束,跑不出去)
- X-错误链同理
- 所有错误都被"困死"在网里 → 没有自由度
打开光滑-粗糙混合边界后:
-
一条 Z-错误链 可以从上光滑边界 出发,穿过网格,从下光滑边界出去
-
这条链不闭合 ,所以它不产生任何 syndrome(不触发任何顶点星算符的 -1 警报)
-
但它从顶部到底部,改变了系统的全局状态
-
这就是 逻辑 Z̄:从上到下贯穿的 Z-链
-
同理,一条 X-错误链 可以从左粗糙边界 出发,从右粗糙边界出去
-
这就是 逻辑 X̄:从左到右贯穿的 X-链
这两条链在网格中心相交一次 → 它们"感知"到对方 → 构成 1 对 Pauli 逻辑算符 → 1 个逻辑量子比特。
完整递进的总结
| 阶段 | 做了什么 | 物理比特 | 约束 | 自由度 | 状态 |
|---|---|---|---|---|---|
| 0 | 1 枚裸硬币 | 1 | 0 | 1 | 完全自由 |
| 1 | 2 枚粘一起 | 2 | 1 | 1 | Z 方向锁了,还剩 1 |
| 2 | 4 枚围成 Z-环 | 4 | 3 | 1 | 还是 1,约束互相冗余 |
| 3 | +X-绳子捆死 | 4 | 4 | 0 | 死锁! |
| 4 | 拉开成 2×2 网格 | 12 | 12 | 0 | 裸网格仍死锁 |
| 5 | 打开两个角的约束 | 12 | 11 | 1 | 最小平面码诞生 |
核心直觉:
自由度不是"加出来的",而是**"松绑"放出来的**。
4 个比特被 4 条绳子捆死 → 自由度 0。
你不停加比特加约束,只要约束和比特等比例增长,系统永远死锁。
平面码的 trick 是:让上下边界"光滑"、左右边界"粗糙",使得一种错误(Z)只能在光滑边界进出,另一种错误(X)只能在粗糙边界进出。
这样,贯穿网格的"弦"成为唯一不被约束捕获的自由度------这就是那个逻辑量子比特。
从这个角度看,表面码的 1 个逻辑自由度,本质上是"两个不同颜色边界之间的拓扑间隙"。