量子计算(一):从可逆门到纠缠

本文是一个两篇系列的第(一)篇。第(一)篇(本文): 基础——量子计算为什么必须可逆、量子比特究竟是什么、它如何演化,以及我们撞见的第一件真正古怪的东西:纠缠,最后还配上一小段能跑的 Qiskit 代码。第(二)篇: 测量、纠缠所成全的那些协议(超密编码、量子隐形传态),以及把这一切串起来的线路模型。

我想从一个几乎不好意思拿出来讲的地方说起:一个逻辑门。你喂给 AND 门两个比特,它还你一个。这张小小的真值表,我们都画过。可是,如果你把量子力学的规则完全当真,这个再寻常不过的门在量子计算机里其实是被禁止的——不是”不方便”,而是被禁止。我想从这处张力切入,因为顺着它一路追下去,正是把量子比特、幺正算符、纠缠这一整套古怪机器从无到有逼出来的过程。所以我们先别急着扑向量子比特,先把它出来。

1. 经典门与可逆计算

1.1 通用性

在拆掉经典计算之前,我们得先把它能做什么说清楚。一组门被称为通用的(universal),如果它能计算任意函数 \(f: \{0,1\}^n \rightarrow \{0,1\}\)

  • 通用门集的例子包括 \(\{\text{AND}, \text{OR}, \text{NOT}\}, \{\text{AND}, \text{NOT}\}\),以及单个门 \(\{\text{NAND}\}\)

image-5.png

1.2 为什么需要可逆性

问题就藏在这里。像 AND 这样的标准经典门是不可逆的,因为你没法从输出 \(x \cdot y\) 唯一地反推出输入 \(x, y\)。你一旦看到结果是 \(0\),就根本不知道是三种输入里的哪一种造出了它。信息就这么没了。而这件事——随手销毁信息——恰恰是量子力学绝不容许的。在量子计算中,演化必须是可逆的。

image-4.png

为什么非可逆不可?这不是一个我们可以自由拍板的设计选择,而是物理本身逼出来的。我们不妨一条一条地走一遍这些理由,因为每一条都是一把通往量子计算机真实运作方式的钥匙。

  • 量子力学的幺正本性:任何封闭量子系统的时间演化,都由一个幺正算符\(U\))描述。在线性代数里,矩阵 \(U\) 是幺正的:\(UU^\dagger = I\)
    • 由于 \(U\) 有逆(\(U^\dagger\)),你总能把操作”撤销”回去。
    • 演化 \(U\)薛定谔方程导出。当系统的哈密顿量(\(H\))不显含时间时,演化可写成 \(e^{-iHt/\hbar}\),它天生就是一个幺正(因而可逆)算符。
    • 幺正变换保持量子态的 \(L_2\) 范数(即总概率),确保它在整个演化过程中始终精确等于 1。
  • 信息守恒:在经典计算里,像 AND 这样的操作之所以不可逆,是因为它丢弃了信息。
    • 没有信息损失:在量子系统里,信息不能凭空被”删除”或”丢失”;它必须保存在系统的状态之中。
    • 托佛利门的例子:要以量子的方式执行经典式的逻辑(比如 AND),我们使用像托佛利门(Toffoli gate,受控-受控-非门)这样的可逆门,它同样是通用的。这个门借助一个辅助比特(Ancilla bit)来存放结果,同时保持原始输入不变,于是整个过程都能被反推回去。
    • 只要我们能在多项式时间内高效地计算 \(f(x)\),我们就能高效地计算那个可逆映射 \((x, 0, 0) \mapsto (x, f(x), 0)\)

image-6.png

最后那一条里其实埋着一个让人安心的结论,值得直白地说出来:坚持可逆性,原则上不让我们付出任何代价。经典计算机能高效做的任何事,可逆机器也能高效地做——我们只不过把输入一路带着走,而不是把它扔掉。

  • 物理热量与朗道尔原理:追求可逆性的物理理由,往往和能量有关。
    • 热量产生:朗道尔原理(Landauer’s Principle)指出,擦除 1 比特信息会向环境释放一份确定数量的热量。
    • 能量效率:由于量子演化是幺正(可逆)的,它理论上不需要擦除信息,而这正是构造硬件、避开经典高性能芯片那种巨大热耗散的一个关键要求。

所以可逆性并不是我们勉强忍受的一种怪癖——它就是量子动力学的肌理本身,甚至还附赠了一份热力学红利。把这一点定下来,我们终于可以问:被演化的那个东西,究竟是什么

2. 量子计算的公设:状态

2.1 量子比特

一个量子比特由二维希尔伯特空间中的一个复向量表示:

$$|\psi\rangle = \begin{pmatrix} \alpha \\ \beta \end{pmatrix} = \alpha|0\rangle + \beta|1\rangle$$

其中 \(\alpha, \beta \in \mathbb{C}\) 是振幅,满足归一化条件 \(|\alpha|^2 + |\beta|^2 = 1\)

请慢慢读这个归一化条件,因为它在干实实在在的活。一个经典比特要么是 \(0\)、要么是 \(1\),没有第三种可能。一个量子比特则被允许是两者的加权混合——但这些权重并不自由,它们模的平方必须加起来等于一,好让”概率加得起来”。正是这一条约束,是后面几乎所有东西生长出来的那颗种子。

  • 计算基:向量 \(|0\rangle = \binom{1}{0}\)\(|1\rangle = \binom{0}{1}\) 构成量子比特的标准基。
  • 狄拉克记号
    • 右矢(Ket) \(|\psi\rangle\):一个列向量。
    • 左矢(Bra) \(\langle \psi |\):一个右矢的共轭转置(对偶向量),写成行向量。
    • 内积\(\langle \psi |\phi \rangle = a_0^* b_0 + a_1^* b_1\)
    • 外积\(|0\rangle\langle 0| + |1\rangle\langle 1|= I\)(单位矩阵)。

2.2 布洛赫球

代数没问题,可”两个复数被一个实约束拴住”这种东西,实在难以想象成一幅图。好在,单个量子比特有一个干净利落的几何安身处。任何单量子比特态都能用下面的参数,可视化成布洛赫球(Bloch Sphere)上的一个点:

$$|\psi\rangle = \cos\frac{\theta}{2}|0\rangle + e^{i\phi}\sin\frac{\theta}{2}|1\rangle$$

其中 \(\theta\)\(\phi\) 是定义该点坐标的实数。于是一个量子比特的状态,简直就是字面意义上空间中的一个方向——球面上的一个点,\(|0\rangle\) 在北极、\(|1\rangle\) 在南极。我们施加到量子比特上的每一个操作,最后都会原来是这个球的某种旋转,这幅图景在第(二)篇里我们会反复倚重。

image-3.png

3. 量子动力学

状态有了;那么,它怎么变?答案我们其实早在第 1 节就剧透过了,但还是让我们把它当作一条公设郑重说出来。封闭量子系统的时间演化,由一个幺正变换描述。

  • 矩阵 \(U\) 是幺正的,如果 \(UU^\dagger = U^\dagger U = I\)
  • 这保证了状态保持归一:\(\langle \psi | U^\dagger U | \psi \rangle = \langle \psi | \psi \rangle = 1\)

第二行正是幺正性之所以要紧的全部理由:它恰恰是那条让”概率加起来等于一”在操作之后也仍然成立、而不只是之前成立的条件。那么,实践中我们到底用哪些幺正算符?真正反复出场的,就那么一小撮。

常见单量子比特门

  • 泡利门\(X = \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}\)\(Y = \begin{pmatrix} 0 & -i \\ i & 0 \end{pmatrix}\)\(Z = \begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}\)

  • 阿达马门(H)\(H = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}\)

  • 相位门\(S = \begin{pmatrix} 1 & 0 \\ 0 & i \end{pmatrix}\)(注:已据笔记更正)以及 \(T = \begin{pmatrix} 1 & 0 \\ 0 & e^{i\pi/4} \end{pmatrix}\)

这里头,阿达马门值得特别点一句:你递给它一个干干净净的 \(|0\rangle\),它还你一个 \(|0\rangle\)\(|1\rangle\) 的均匀混合。它是我们从一个确定态里制造叠加的标准工具——而再过一会儿,它就会成为搭建某样更古怪东西的第一步。

4. 复合系统与纠缠

4.1 张量积

一个量子比特是一个球。那两个呢?你也许会猜,我们不过是把两个球并排摆着——对最简单的那些状态来说,这猜得一点没错。复合系统的状态空间,是各个分量空间的张量积。比如,若我们有两个分别处于状态 \(|\psi\rangle\)\(|\phi\rangle\) 的量子比特,组合后的状态就是 \(|\psi\rangle \otimes |\phi\rangle\)(常写作 \(|\psi\phi\rangle\))。

4.2 量子纠缠

但正是在这里,“两个球”的直觉悄悄崩了,量子力学真正的魔法登场了。

  • 乘积态:能写成 \(|\psi\rangle \otimes |\phi\rangle\) 形式的状态。
  • 纠缠态:_无法_分解成各个量子比特状态之乘积的状态。
    • 例子:状态 \(\frac{1}{\sqrt{2}}(|00\rangle + |11\rangle)\) 是纠缠的。证明:令 \(\alpha_0\beta_1 = \alpha_1\beta_0 = 0\),同时 \(\alpha_0\beta_0 = \alpha_1\beta_1 = \frac{1}{\sqrt{2}}\),会导出矛盾。

请在这个矛盾上多停一秒,因为它不是个技术细节——它就是关键。我们试图把这个两量子比特态描述成”A 处于某个状态,而 B 单独处于某个状态”,可代数干脆利落地拒绝了。根本没有这样的描述。这一对拥有一种联合的实在性,它无法被切成两份各自私有的实在。两个量子比特谁都没有自己单独的状态;只有这一对才有。这正是第(二)篇要大手大脚花掉的那项资源——花在编码上、花在隐形传态上——它也是我们已经彻底离开经典世界的最干净的信号。

实践实现

说够了。我们刚刚称之为纠缠的那个贝尔态 \(\frac{1}{\sqrt{2}}(|00\rangle + |11\rangle)\),并不是一个要你凭信仰接受的抽象物——你能用几行代码把它搭出来,把振幅直接从屏幕上读下来。注意这个配方恰好就是我们一路攒下的那两步:先用一个阿达马门造出叠加,再用一个 CNOT 把两个量子比特绑到一起。

from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

# 1. Create a Bell State (Entangled State)
qc = QuantumCircuit(2)
qc.h(0)     # Apply Hadamard to the first qubit
qc.cx(0, 1) # Apply CNOT (controlled by q0, targeting q1)

# View the statevector
state = Statevector.from_instruction(qc)
print("Bell State Vector:")
print(state.data)

# 2. Apply a gate to a subsystem: (I ⊗ X) acting on the Bell state
qc.x(1) 
final_state = Statevector.from_instruction(qc)
print("\nState after (I ⊗ X):")
print(final_state.data)

至此,我们把整套工具凑齐了:可逆的(幺正的)动力学、量子比特和它的布洛赫球、推着它转动的那一小撮门,以及两个量子比特之间能共享的纠缠。而我们一直小心避开的,正是那个真正能从这套量子机器里拽出一个经典答案的操作——测量。它最后会原来是整个故事里最微妙的一块,也恰恰是那些有趣协议安身的地方。这正是第(二)篇的起点。未完待续。