量子计算 [2] -- 量子位门
量子位门(Qubit Gate, 或简称位门Gate), 是对量子位进行操作的基本途径. 如同逻辑门是电子计算机的起点一样, 量子位门也是量子计算机的起点, 所有量子位操作都是由量子位门实现的.

单量子位门
如同名称一样, 这类位门是作用在1个量子位上的, 并且只会改变1个量子位的状态. 所以如果有个可分的多量子位系统, 无论塞多少单量子位门进去, 系统都是可分的.
因为单量子位有两个状态, 所以最多需要4个数字表示单量子位的所有操作.
记 U 为随意一个单量子位门, 则 U = a|0❭❬0| + b|0❭❬1| + c|1❭❬0| + d|1❭❬1|, 其中b为在操作U里从状态1变为状态0的"比例", 还是用例子最快:
现在有一个随意的量子位: |ψ❭ = α|0❭ + β|1❭, 把U作用到|ψ❭上, 写作 U|ψ❭, 写成完整式子有 (a|0❭❬0|+b|0❭❬1|+c|1❭❬0|+d|1❭❬1|)(α|0❭+β|1❭), 初中数学得: aα|0❭❬0|0❭+bα|0❭❬1|0❭+cα|1❭❬0|0❭+dα|1❭❬1|0❭+aβ|0❭❬0|1❭+bβ|0❭❬1|1❭+cβ|1❭❬0|1❭+dβ|1❭❬1|1❭. 看到里面出现了大量的❬·|·❭的, 当左右两个数字相等时为1, 否则为0, 也就是说 ❬0|0❭=1, ❬0|1❭=0, ❬1|0❭=0, ❬1|1❭=1. 对上式所有❬·|·❭计算得: aα|0❭+cα|1❭+bβ|0❭+dβ|1❭, 合拼同类项: (aα+bβ)|0❭+(cα+dβ)|1❭. 也就是说 U|ψ❭ = (aα+bβ)|0❭+(cα+dβ)|1❭.
当存在多个单量子位门时, 计算顺序是从右到左, 这与四则运算有点不一样 [当然, 从左到右逐个位门计算也是ok的], 并且位门绝对不会出现在量子位右侧 [毕竟U|ψ❭是说把位门作用到量子位上, |ψ❭U的话把量子位作用到位门上是干什么]
下面介绍几个常用的单量子位门:
I 门 (Identity Gate), I = |0❭❬0| + |1❭❬1|. 这个门完全不会改变量子位, 就是一个摆设
H门 (Hadamard Gate), H = 2^0.5 * (|0❭❬0| + |0❭❬1| + |1❭❬0| - |1❭❬1|). 这个门可以快速地制备均匀叠加的量子位, 比如H|0❭为0.5概率在|0❭, 0.5概率在|1❭. H|1❭也类似, 但|0❭与|1❭的相位相差了π.
X门 (Pauli X Gate), X = |0❭❬1| + |1❭❬0|. X门用于交换|0❭与|1❭
Y门 (Pauli Y Gate), Y = -i|0❭❬1| + i|1❭❬0|. Y门与X门类似, 但两个状态都被加上或减去了π/2相位
Z门 (Pauli Z Gate), Z = |0❭❬0| - |1❭❬1|. Z门是翻转|1❭的相位, 则在很多叠加态的系统时里需要干涉时非常有用, X = HZH
上面的门都有一个特点: 就是自身为自身的逆, 也就是说连续在量子位上应用两次相同的门, 会恢复到引用之前的状态, 这种特性常用来从数据量子位运算得到结果量子位后, 把数据量子位恢复到运算前的状态 [因为量子之间互相纠缠干涉, 常常会在运算时数据被修改, 甚至有时会把数据位用作临时结果位].
下面的门也属于单量子位门, 但自身的逆为其他位门, 关于位门的逆, 可以期待一下可能存在的附章. S门和T门属于相位偏移门(Pahse Shift Gates). Rx, Ry, Rz和R1都属于旋转门(Rotation Gates), 这是因为在Bloch球里看上去就是绕着相应的轴转动一定角度一样.
S = |0❭❬0| + i|1❭❬1|
T = |0❭❬0| + e^(iπ/4) |1❭❬1|
Rx(θ) = cos(θ/2)|0❭❬0| - isin(θ/2)|0❭❬1| - isin(θ/2)|1❭❬0| + cos(θ/2)|1❭❬1|
Ry(θ) = cos(θ/2)|0❭❬0| - sin(θ/2)|0❭❬1| + sin(θ/2)|1❭❬0| + cos(θ/2)|1❭❬1|
Rz(θ) = e^(-iθ/2)|0❭❬0| + e^(iθ/2)|1❭❬1|
R1(θ) = |0❭❬0| + e^(iθ)|1❭❬1|, R1门的旋转定义与四元数(quaternion)有关, 这实在是远远超过了量子计算的范畴了

多量子位门
对于多量子位来说, 所有可能的位门实在过于繁多, 因此在这里只介绍一种特殊的多量子位门: 控制位门 (Controlled Gate), 并且已经被证明: 任意一个多量子位门都可以从单量子位门和CNOT门组合得到, CNOT门就是一个两量子位的控制位门.
控制位门由三部分组成: 位门, 控制位和被控制位. 当控制位全部为|1❭时, 位门作用到被控制位上.
比如说CNOT门里的位门为X门, 并且控制位和被控制位都只有1个. 假设现在有一个双量子位系统: 第1位为控制位, 第2位为被控制位, 应用CNOT时 [X门的作用是交换量子位的|0❭和|1❭状态], 当第1位为|1❭时, 交换第2为的|0❭和|1❭. 设双量子位系统状态为 |ψ❭ = c_0|00❭ + c_1|01❭ + c_2|10❭ + c_3|11❭, 应用CNOT会交换|10❭和|11❭ [第1位为|1❭, 交换第2位|0❭和|1❭], 得到 c_0|00❭ + c_1|01❭ + c_3|10❭ + c_2|11❭
CNOT = |00❭❬00| + |01❭❬01| + |11❭❬10| + |10❭❬11|
试验: 制造一个双量子位系统, 引用H门到第1位上, 查看一下系统状态, 然后以第1位为控制位, 第2位为被控制位, 应用CNOT门, 再查看系统状态 [这里使用了自制的量子计算模拟库, 也可以使用Q#等主流语言/库]




作用CNOT后整个系统变为了不可分状态, 可以看出量子位的纠缠是从控制位门产生的.
还有一个常用的控制位门为Toffoli门(又称CCNOT门), 与CNOT门类似, Toffoli门里的位门也是X门, 且被控制位为1为, 但控制位变为2位. 只有当控制位都为|1❭时才会交换被控制位的状态, 示例:

把CCNOT门分解为单量子位门和CNOT门的组合得:

控制位门能做的事情还有很多, 比如说把控制位全部应用X门后, 再应用控制位门, 然后再把X门应用上控制位, 就可以做到原本控制位的状态全部为|0❭时才会把位门作用在被控制位上. 并且如果位门本来就是多量子位门/操作, 被控制位还可以是多个量子位

结语
在本篇了简单了解了量子计算的砖块 -- 量子位门, 正式踏出了量子计算的第一步. 跟第一篇一样, 这篇也是会有附章介绍里面的数学计算的, 只不过半夜4:30实在莫得精力了, 下次一定.jpg
吐槽: 本来是懒得做图的, 但是不做封面真的太难看啦, 所以随便latex了一条东西上去算了
自制的量子模拟库项目: [github.com/nyasyamorina/nyasQuantumCalculate], 库还是在beta阶段, 内部代码随时会发生大重构 [比如说之前是cython为主, 现在直接转为纯python+numpy了]
日常推Q群: [274767696]