可逆操作
经典计算机时时刻刻都在丢弃信息。一个 AND 门吃进两个比特、吐出一个比特——一旦你看到输出是 0,就无法分辨是三种输入中的哪一种产生了它。丢失的那部分信息以热的形式散掉。量子门则不同:每个量子门都是可逆的。无论它做了什么,总有另一个门能把它精确地撤销,让量子比特回到出发时的样子。
可逆性不是一种设计选择——它是物理规律强加的。在两次测量之间,量子比特按照一套从不丢失其来历的规则演化,所以一个门只能重新排布量子态,绝不会抹掉其中一部分。信息真正塌缩的唯一时刻是测量,那是一个独立的、不可逆的步骤,我们只在最后才执行它。
单量子比特门
最简单的门一次只作用在一个量子比特上。单个量子比特的状态由两个数完全描述——它含有多少 |0> 成分、多少 |1> 成分,包括两者之间的相对相位。一个单量子比特门,无非就是一个固定的配方:把这两个数吃进去,再吐出两个新的数。由于门是可逆的,这个配方总能反过来运行。
我们用括号记法 |0> 和 |1> 来写输入态和输出态。作用在 |0> 上的一个门,可能让它保持不变、把它翻转成 |1>,或者把两者混成一个叠加态。下面的记法从左往右读:门的名字、右边的输入,以及箭头之后的结果。
X|0> = |1> # X flips 0 to 1 X|1> = |0> # ...and 1 back to 0 Z|0> = |0> # Z leaves 0 alone Z|1> = -|1> # ...but flips the sign of 1
阿达马门
阿达马门(记作 H)是制造叠加的主力。给它一个 |0>,它会产生 |0> 与 |1> 的等权混合;给它一个 |1>,它会产生类似的混合,但内部带着不同的符号。经过一次 H 之后,量子比特以一种精确、可被完整描述的方式,真正悬在 0 与 1 之间。
H|0> = (|0> + |1>)/sqrt(2) # equal superposition H|1> = (|0> - |1>)/sqrt(2) # equal mix, opposite sign H(H|0>) = |0> # H is its own inverse
泡利门(X、Y、Z)
泡利门是三种最基本的单量子比特操作。X 是量子版的 NOT:它交换 |0> 与 |1>。Z 是相位翻转:它保留 |0>、却翻转 |1> 上的符号。Y 一次性兼做两者——既翻转比特,又翻转相位。加上恒等门(什么都不做),这三个门就是拼写出大量单量子比特逻辑所用的字母表。
- X(比特翻转):交换 |0> 与 |1>。这是最接近经典 NOT 门的操作。
- Z(相位翻转):保持 |0> 不变,翻转 |1> 的符号。它单独看不出来,却在干涉中起决定性作用。
- Y(比特与相位翻转):把一次 X 和一次 Z 合在一起施加的综合效果。
- 每个泡利门都是自身的逆:把其中任意一个连用两次,量子比特就回到出发时的状态。
把门看作旋转
有一幅优美的几何图像把这一切串在一起。任何单个量子比特的状态,都可以画成一个箭头,指向一个球面上的某处——这就是布洛赫球。在这幅图像里,每个单量子比特门都不过是对那个箭头做一次旋转。X 是绕某根轴转半圈,Z 是绕另一根轴转半圈,而 H 则是一次把两根轴对调的旋转。可逆性变得一目了然:你总可以转回去。
这也解释了为什么门能如此干净地组合:先做一个门、再做一个门,无非就是先转一次、再转一次,而合起来的动作又是一次旋转。要构建一个完整的算法,你就把一连串这样的旋转——再加上至少一个用来制造纠缠的双量子比特门——排进一个量子电路里。这样一小套固定的门,就已经足以表达任何量子计算。