DAOrayaki DAO研究奖金池:
资助地址: DAOrayaki.eth
投票进展:DAO Reviewer 1/0 通 过
赏金总量:35 USD
研究种类:Quantum Computing, Logic Gates
原文作者: Geminae Stellae
创作者:SueT@DAOrayaki.org
审核者:Heyyawn@DAOrayaki.org
原文: Introduction to Quantum logic gates

量子计算机最重要的部分之一,也是每个量子算法的组成部分。

在我们之前的文章《量子计算——大图景》中,我们发现了一个量子比特可能呈现的状态。我们看到,我们看到量子比特可以表示为具有二维向量的两个状态的叠加:

此处:
α = cosθ/2
β= e^iϕsinθ/2
θ 和 ϕ 是实数

在这篇文章中,我们将介绍量子逻辑门,即在这些状态之间改变量子比特的操作。
什么是量子电路?

与经典电路类似,量子电路是量子门的有序序列,量子比特的测量和初始化为已知值。任何量子程序都可以用一系列量子电路和非并发经典计算来表示。
什么是逻辑门?
在一个或多个输入进行操作以产生一个输出的基本电子电路。换句话说,当数据通过门时,它会改变其状态,而这种变化取决于输入和门本身。

3. 经典逻辑门
经典逻辑门是经典计算机的基本操作,允许比特在 1 和 0 之间改变其状态。我们已经提到,这种变化取决于输入和门的类型。经典逻辑门有多个示例,例如:非门、与门、或门、与非门、或非门、异或门等。
例如,一个非门会将比特从 0 更改为 1(反之亦然)。与门和或门是双位门,以两个比特为输入,根据输入的不同,输出一个比特。

量子逻辑门

量子计算机使用量子比特而不是比特来操作。与只能为 0 或 1 的传统比特不同,量子比特可以存在于 0 和 1 的“叠加”中。

使得量子比特如此强大的原因是它能够进行量子计算,而这些计算如果没有被称为量子逻辑门的基本操作,就无法实现。
最常见的量子门在一个或两个量子比特的空间上操作。这意味着作为矩阵,量子门可以用具有正交行的 2 x 2 或 4 x 4 矩阵来描述。

有很多类型的量子门。有单量子比特门,它可以将一个量子比特从 0 翻转到 1,并允许创建叠加态。然后还有双量子比特门。这些门允许量子比特相互交互,并可用于创建量子纠缠:两个或多个相关的量子位的状态。

量子门是可逆的!
量子电路的一个重要特征是操作(门)总是可逆的!这些可逆门可以表示为矩阵,也可以表示为围绕布洛赫球的旋转。
from qiskit import QuantumCircuit, assemble, Aer
from math import pi, sqrt
from qiskit.visualization import plot_bloch_multivector, plot_histogram
sim = Aer.get_backend('aer_simulator')
泡利门
提醒:泡利矩阵
在物理学中,泡利矩阵是一组 2 × 2 埃尔米特矩阵以及酉矩阵的复合体。通常用希腊字母“sigma”(σ)表示

我们将在这里看到,泡利矩阵可以表示一些非常常用的量子门。
泡利 X 门
X 门由泡利-X 矩阵表示:

我们可以通过将一个量子比特的状态向量与门相乘来改变它的状态。我们可以看到 X 门切换状态 |0⟩ 和 |1⟩ 的幅度:

在 Qiskit 中,我们可以创建一个短路来验证这一点:
# Let's apply a Pauli X-gate on a |0> qubit
qc = QuantumCircuit(1) #create a new circuit with one register
qc.x(0) #create a |0> qubit
qc.draw()

为了可视化我们的量子电路的结果,我们需要使用 plot_bloch_multivector() ,它采用量子比特的状态向量而不是布洛赫向量。
# Let's visualize the result
qc.save_statevector()
qobj = assemble(qc)
state = sim.run(qobj).result().get_statevector()
plot_bloch_multivector(state)

我们确实可以看到量子比特的状态是 |1⟩,正如预期的那样。我们可以将其视为围绕布洛赫球体 x 轴的 π 弧度旋转。与经典的非门类似,X 门将状态从 |0> 更改为 |1>(反之亦然),这就是为什么它通常也被称为非门的原因。
泡利 Y 和 Z 门
上图中的 Y 和 Z 泡利矩阵也是我们量子电路中的 Y 和 Z 门:

在布洛赫球中,它们分别表示围绕 y 轴和 z 轴旋转 π。
在 Qiskit 中,我们可以使用以下方法将 Y 门和 Z 门应用到我们的电路中:
qc.y(0) # Do Y-gate on qubit 0
qc.z(0) # Do Z-gate on qubit 0
qc.draw()
X、Y 和 Z 基数
注意:矩阵的特征向量
我们已经看到,一个向量 |v> 与一个矩阵 M 相乘会得到一个向量 |v'>:
M|v⟩=|v′⟩ ←新矢量
有一种特殊情况,即向量 |v> 乘以矩阵 M 等同于同一矩阵 M 乘以一个标量 λ:
M|v⟩=λ|v⟩
任何具有这种性质的向量 |v>,都被称为矩阵 M 的特征向量。
请看下面的例子,其中:
Z|0⟩=|0⟩
Z|1⟩=-|1⟩
从以上结果,我们可以得出结论:量子比特状态 |0> 和 |1> 是泡利 Z 矩阵的特征向量。由于我们量子比特的状态是由二维向量表示的,我们通常称这些向量为特征态。由状态 |0⟩ 和 |1⟩ 形成的基础被称为 Z 基数。事实上,这并不是我们唯一可以使用的基础,我们还有 X 基数,由泡利 X门的特征态形成。我们称这两个向量为 |+⟩ 和 |-⟩:

仅靠泡利门不足以将量子比特移动到除 0 或 1 之外的任何状态,这意味着我们永远无法实现区分量子比特和经典比特的叠加。为了创造更多有趣的状态,我们将需要更多的门,比如:
阿达马门
阿达马门(H-gate)是一个基本的量子门。它允许我们远离布洛赫球体的两极,并创造出 |0⟩和 |1⟩的叠加,它的矩阵如下:

我们可以看到,它进行了以下的转换:
H|0⟩=|+⟩
H|1⟩=|-⟩
可以认为这是在 X 基和 Z 基之间转换量子比特的状态。
你可以使用下面的小工具来测试这些门:
# Run the code in this cell to see the widget
from qiskit_textbook.widgets import gate_demo
gate_demo(gates='pauli+h')
P 门
P 门(相位门)是参数化的。它围绕 Z轴方向对 ϕ 进行旋转,其矩阵形式如下:

其中 ϕ 是一个实数。
你可以使用下面的小工具来玩转 P 门,用滑块来指定 ϕ。
# Run the code in this cell to see the widget
from qiskit_textbook.widgets import gate_demo
gate_demo(gates='pauli+h+p')
在 Qiskit 中,我们用 p(phi, qubit) 指定一个 P 门。
qc = QuantumCircuit(1)
qc.p(pi/4, 0)
qc.draw()

提示:泡利-Z门是 P 门的一个特例,其中 ϕ=π。实际上,有三个更常见的门也是 P 门的特例,即 I 门、S 门和 T 门。
I 门、S 门和 T 门
1. I 门
首先是什么都不做的 I 门(又称“Id 门“或“身份门”),由身份矩阵表示。

在你的电路中的任何地方应用身份门都不应该对量子比特的状态产生影响,有两个主要的使用场景:
- 在计算中,例如:证明 X 门是它自己的逆向,即 I=XI=X;
- 当我们想让真实硬件具体解释一个“什么都不做”或“无”操作时。
2. S门
有时被称为√Z 门,它是 ϕ=π/2 的 P 门,它围绕布洛赫球体转了四分之一圈。
与之前的门不同的是,S 门不是它自己的倒数!这就是为什么你会经常看到 S† 门,(也被称为“S-dagger”,“Sdg”或 √Z† 门)。S† 门显然是一个取值 ϕ=−π/2 的 P门。

√Z门的名称来自于两个连续应用的 S 门与一个 Z 门具有相同的效果:
SS|q⟩=Z|q⟩
在 Qiskit 中对量子比特应用 S 门
qc = QuantumCircuit(1)
qc.s(0) # Apply S-gate to qubit 0
qc.sdg(0) # Apply Sdg-gate to qubit 0
qc.draw()

3. T 门
T 门是 ϕ=π/4 的 P 门:

与 S 门一样,T 门有时也被称为 4√Z 门。
qc = QuantumCircuit(1)
qc.t(0) # Apply T-gate to qubit 0
qc.tdg(0) # Apply Tdg-gate to qubit 0
qc.draw()

4. U 门
正如我们前面所看到的,I 门、Z 门、S 门和 T 门都是常规 P 门的特例。同样,U 门是所有单比特量子门中最常规的门,它是一个参数化门,形态如下:

本章中的每一个门都可以被定义为 U(θ,j,λ),但在电路图中很少看到这种情况,这可能是因为会带来阅读障碍。
举个例子,我们也会看到在一些特定情况下 U 门会等同于 H 门和 P 门。

H 门和 P 门是 U 门的特例
# Let's have U-gate transform a |0> to |+> state
qc = QuantumCircuit(1)
qc.u(pi/2, 0, pi, 0)
qc.draw()

# Let's see the result
qc.save_statevector()
qobj = assemble(qc)
state = sim.run(qobj).result().get_statevector()
plot_bloch_multivector(state)

资源
你可以通过链接访问社区创建的笔记,上面有一些常见的量子门以及它们的属性:
https://raw.githubusercontent.com/qiskit-community/qiskit-textbook/main/content/ch-states/supplements/single-gates-cheatsheet.pdf
完整代码:
https://github.com/ihssene-nasa/Qiskit_tutorial/blob/main/Qiskit_Quantum_Gates.ipynb