本节摘要:读取即破坏,备份不可能——这两条第一性约束源自量子力学的线性结构,它们宣判了经典容错经验在量子世界的失效,也划定了后续一切防御工事(纠错码、密钥分发、读出校准)必须遵守的建筑规范。本节给出三行证明与一段失败的克隆演练。
所有学过经典运维的人上手量子计算时,几乎都会问出同一个问题。硬盘会坏,所以做冗余;通信会丢包,所以重传;程序怕崩,所以快照加回滚。这套"多存几份、出错重来"的经验在量子世界一夜作废:你想备份的态,物理定律禁止复制它;你想读取检查的态,读取动作本身就会把它毁掉。这不是工程不成熟,而是线性代数层面的禁令。理解这条禁令为什么成立、严到什么程度、又给防守方留了哪扇侧门,是本节的全部任务——它决定了第 4 章纠错码为什么必须长成那副绕道的模样。
第 1 章已经用玻恩规则算过测量概率,这里把"提问"的机制补完整。测量在数学上是一组投影算符,对应你选定的测量基。选计算基(记作 Z 基),态 (\alpha, \beta) 以 |\alpha|^2 概率坍缩到 |0\rangle、以 |\beta|^2 概率坍缩到 |1\rangle;选对角基(X 基),同样的态按 |\alpha + \beta|^2/2 与 |\alpha - \beta|^2/2 的概率坍缩到 |+\rangle 或 |-\rangle。两次提问得到的答案可以完全不同:态 (1/\sqrt{2}, 1/\sqrt{2}) 在 Z 基下是五五开,在 X 基下却以概率塌缩到确定的结果。
这就是相位信息的藏身之处,也是测量的第一重代价:每次测量只揭示你选的那个基下的信息,其余信息全部损毁,而且没有第二次机会——态已经坍缩成测量结果对应的基矢。第二重代价更隐蔽:测量不止由实验员发起。环境时时刻刻都在对量子比特做"非受控的测量",光子散射、热噪声扰动,每一次都在向环境泄露态的部分信息、同时把随机性注入态本身。退相干,本质上就是环境替你做了你不想要的测量。这条暗线在 2.3 节会给出定量模型。
| 测量基 | 基矢 | 揭示的信息 | 摧毁的信息 |
|---|---|---|---|
| Z 基(计算基) | \|0\rangle, \|1\rangle | 振幅模方的分配 | 相位差全部 |
| X 基(对角基) | \|+\rangle, \|-\rangle | 相对相位的奇偶 | 计算基的分配 |
| Y 基 | \|0\rangle \pm i\|1\rangle 方向 | 相位的正交分量 | 其余二者 |
表里的规律值得盯住:每个基揭示一组信息的同时摧毁另外两组。量子算法的执刀手艺,就是安排测量顺序与基的选择,让"要的答案"在被摧毁之前被读出来。
定理的陈述很朴素:不存在一个物理过程,能把任意未知量子态复制成两份。证明只需线性性。假设存在克隆机 U,它应当把基态正确复制:U|0\rangle|e\rangle = |0\rangle|0e\rangle,U|1\rangle|e\rangle = |1\rangle|1e\rangle,其中 |e\rangle 是机器的空白初态。现在喂入叠加态 |+\rangle = (|0\rangle + |1\rangle)/\sqrt{2},按线性性展开:
这是纠缠态。而"复制成功"要求输出为 |+\rangle|+e\rangle,即两个相同的独立叠加态。两者不相等——线性性亲手堵死了克隆。注意定理的适用范围:它禁止复制任意未知态。已知的基态当然可以反复制备,"知道态是什么"与"复制它"是两回事;这扇侧门正是经典通信里"发两遍"仍被允许的原因。

证明看过了,代码里再走一遍。受控非门是最常见的"克隆尝试":直觉上它把控制位的值抄给了目标位。下面的代码验证它对两个基态都能如愿,对叠加态却产出纠缠。
# noclone.py:受控非门不能克隆叠加态(仅标准库) import math def cnot4(state): """两比特受控非门,振幅表 [00, 01, 10, 11],第一比特控制。""" a00, a01, a10, a11 = state return (a00, a01, a11, a10) def measure_probs(state): return [abs(a) ** 2 for a in state] def joint_independent(state, p1, p2): """检验联合分布是否等于两个独立边缘分布之积(独立的必要条件)。""" a00, a01, a10, a11 = measure_probs(state) return (abs(a00 - p1 * p2) < 1e-9 and abs(a01 - p1 * (1 - p2)) < 1e-9 and abs(a10 - (1 - p1) * p2) < 1e-9 and abs(a11 - (1 - p1) * (1 - p2)) < 1e-9) s = 1 / math.sqrt(2) # 场景一:输入 |10>(已知基态),克隆"成功" out = cnot4((0.0, 0.0, 1.0, 0.0)) print("基态输入输出:", [round(a, 3) for a in out]) # [0, 0, 0, 1] -> |11> # 场景二:输入 |+0>(未知叠加态喂给控制位) before = (s, 0.0, s, 0.0) out = cnot4(before) print("叠加输入输出:", [round(abs(a), 3) for a in out]) # [0.707, 0, 0, 0.707] # 独立性检验:若真被克隆,联合分布应等于 0.5 与 0.5 的边缘分布之积 print("看起来像两份独立副本吗:", joint_independent(out, 0.5, 0.5)) # False
输出说明了一切:叠加态经过受控非后,联合分布只剩 |00\rangle 与 |11\rangle 两格——两个比特要么同为零、要么同一,完美关联,这恰恰是独立性的反面。每个比特单独看都是五五开的随机数,但它们的随机完全同步。你得到的不是两份副本,而是一对纠缠比特:测量任何一个都得到随机结果,复制等于没发生。这个演练还有一层工程含义:正因为"拷贝再逐位比对"这条路走不通,第 4 章的纠错码才发明了伴随式测量——用精心设计的辅助比特去问"有没有错"而不问"态是什么",在不坍缩数据态的前提下提取错误信息。
把 2.1 节与 2.2 节放在一起,一个精妙的转折浮现了:同一条禁令,对计算是障碍,对保密却是天赋。窃听者想偷量子信道里的信息,必须复制或测量它——复制被定理禁止,测量必然留下扰动痕迹。量子密钥分发协议正是把"扰动可检测"做成了安全依据:通信双方抽查一部分比特比对误码率,误码超标就说明信道里有第三只耳朵。防御战的比喻在这里反转了一次:退相干是敌人,而敌人赖以进攻的物理机制(测量必然扰动),同时也是我方最可靠的哨兵。
需要注意的是,不可克隆定理挡不住"间接攻击"——窃听者可以不复制、只逐个拦截测量再转发,只是这种粗暴手法会留下高误码;更隐蔽的中间人手法则要靠认证手段防。物理定律给了哨兵,哨兵的位置仍要工程师来放。
约束摸清了,下一节给敌人建立定量模型:密度矩阵记账,量子信道推演,把退相干的每一条进攻路线画成可计算的地图。