
$ \newcommand{\bra}[1]{\left< #1 \right|} \newcommand{\ket}[1]{\left| #1 \right>} \newcommand{\bk}[2]{\left< #1 \middle| #2 \right>} \newcommand{\bke}[3]{\left< #1 \middle| #2 \middle| #3 \right>} \newcommand{\mzero}[0]{\begin{bmatrix} 1 \\ 0 \end{bmatrix}} \newcommand{\mone}[0]{\begin{bmatrix} 0 \\ 1 \end{bmatrix}} \newcommand{\ostwo}[0]{\frac{1}{\sqrt{2}}} \newcommand{\mhadamard}[0]{\begin{bmatrix} 1 & 1 \\ 1 & -1 \end{bmatrix}} \newcommand{\msnot}[0]{\begin{bmatrix} 1 + i & 1 - i \\ 1 - i & 1 + i \end{bmatrix}} \newcommand{\mswap}[0]{\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}} \newcommand{\rb}[0]{\color{red}{1}} \newcommand{\vc}[1]{\color{red}{#1}} $
目录
引言
在上一篇文章中,我们探索了几种常用的量子计算门,并讨论了如何使用这些门创建各种量子态。在本文中,我们将继续探索门,并研究一些更复杂的门。您将了解如何旋转和交换量子比特,并深入研究受控门,这些门允许您根据输入应用门。
如果您还没有阅读,我强烈建议您在继续之前阅读本系列的第一部分和第二部分。
翻转和旋转量子比特
我们在第二部分中了解到,Pauli-X门如何用于翻转计算基态。它通过将量子比特旋转到Bloch球上的相反(对极)侧来实现。相互正交的状态对应于Bloch球上的对极点。
另外还有两个Pauli门,它们在不同的轴上执行相同的操作。它们是Pauli-Y门和Pauli-Z门。
注意:当Pauli门在状态方程中表示为算子时,有时它们的写法不同,如下所示
$ X = \sigma_x = \sigma_1 \\ Y = \sigma_y = \sigma_2 \\ Z = \sigma_z = \sigma_3 $
每个门绕Bloch球上指示的轴旋转π弧度(180°)。
除了旋转,每个门还会对量子态产生特定且显著的改变。之前我们看到Pauli-X门如何用于将量子比特从|0⟩翻转到|1⟩,反之亦然。
Pauli Z门会产生一个符号翻转,所以如果一个量子比特的状态是
$ \ket{\psi} = \alpha \ket{0} + \beta \ket{1} $
那么应用Pauli-Z门会产生以下结果
$ Z \ket{\psi} = \alpha \ket{0} \color{red}{-} \beta \ket{1} $
为了将|+⟩态转换为|-⟩态,或反之,我们应用Pauli-Z门。Pauli-Z门的矩阵如下所示
$ Z = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} $
应用Pauli-Y门的结果是量子比特翻转和相位偏移。σy = I Pauli-Y门将|0⟩态映射到*i*|1⟩,将|1⟩态映射到-i|0⟩。
Pauli-Y门的矩阵是
$ Y = \begin{bmatrix} 0 & -i \\ i & 0 \end{bmatrix} $
如果我们有两个处于叠加态的量子比特,例如\(\Phi^+\)态
$ \ket{\Phi^+} = \frac{\ket{00} + \ket{11}}{\sqrt{2}} $
我们仅通过使用Pauli-Y门就可以将\(\ket{\Phi^+}\)转换为\(\ket{\Psi^-}\)
$ Y \ket{\Phi^+} = \ket{\Psi^-} $
使用S门和T门进行相位旋转
与Pauli-Z门(也称为Z门)一样,S门和T门也通过绕Bloch球的z轴旋转来改变量子比特的相位。旋转角度如下
$ \begin{array}{c|l} \text{门} & \text{Z轴旋转} \\ \hline Z & \pi \text{ 弧度 } (180^\circ ) \\ S & \frac{\pi}{2} \text{ 弧度 } (90^\circ ) \\ T & \frac{\pi}{4} \text{ 弧度 } (45^\circ ) \end{array} $
由于Z、S和T门不改变Bloch球上的垂直位置,因此概率分布不受影响。
S门(也称为Phase门或Z90门或\(\sqrt{Z}\)门)将状态α|0⟩ + β|1⟩映射到α|0⟩ + *i*β|1⟩。由于*i*成为|1⟩分量的系数,并且i2 = -1,因此|1⟩的相位在Bloch球上被翻转。
S门的矩阵表示如下
$ S = \begin{bmatrix} 1 & 0 \\ 0 & i \end{bmatrix} $
S门有时被称为\(\sqrt{Z}\)门的原因是S2 = Z,如下所示
$ S^2 = \begin{bmatrix} 1 & 0 \\ 0 & i \end{bmatrix} \begin{bmatrix} 1 & 0 \\ 0 & i \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix} = Z $
T门的矩阵表示如下
$ T = \begin{bmatrix} 1 & 0 \\ 0 & e^{-i \frac{\pi}{4}} \end{bmatrix} $
S门与T门的关系是S = T2。这是因为\(\left( e^{-i \frac{\pi}{4}} \right)^2 = i\)。
使用R门进行状态旋转
Pauli矩阵将状态翻转到Bloch球的另一侧,而S门和T门分别执行90°和45°的旋转。但是,有时您可能需要将量子比特旋转任意角度。为此,我们转向R系列门。
Rx、Ry和Rz分别绕其各自的轴以指定的角度旋转状态。
Rx门的矩阵表示如下
$ R_x\left(\theta \right) = \begin{bmatrix} \cos{\frac{\theta}{2}} & -i \sin{\frac{\theta}{2}} \\ -i \sin{\frac{\theta}{2}} & \cos{\frac{\theta}{2}} \end{bmatrix} $
Ry门的矩阵表示如下
$ R_y\left(\theta \right) = \begin{bmatrix} \cos{\frac{\theta}{2}} & -\sin{\frac{\theta}{2}} \\ \sin{\frac{\theta}{2}} & \cos{\frac{\theta}{2}} \end{bmatrix} $
与S、T和Z门一样,Rz门用于改变状态的相位。
Rz门的矩阵表示如下
$ R_z\left(\theta \right) = \begin{bmatrix} e^{-i \frac{\theta}{2}} & 0 \\ 0 & e^{i \frac{\theta}{2}} \end{bmatrix} $
值得注意的是,正如Williams(2011,第83页)指出的那样,您可以通过组合Ry门和Rz门来执行X轴上的旋转,而无需使用Rx门,如下面的恒等式所示
$ \begin{align} R_x\left( \theta \right) & \equiv R_z\left( - \frac{\pi}{2} \right) \cdot R_y\left( \theta \right) \cdot R_z\left( \frac{\pi}{2} \right) \\[10pt] & \equiv R_y\left( \frac{\pi}{2} \right) \cdot R_z\left( \theta \right) \cdot R_y\left( - \frac{\pi}{2} \right) \end{align} $
还有另一个门可用于旋转状态。我说“可能”,因为它尚未在实际量子比特上成功实现。它被称为Deutsch门。该门的优点在于它允许围绕一个向量进行旋转,该向量从Bloch球的原点投射出来。正如Yanofsky & Mannucci(2010,第182页)所描述的那样,Deutsch门接受三个参数:dx、dy和dz,它们描述了Bloch球上要发生旋转的轴。
使用Swap门交换量子比特
Swap门的作用是交换两个量子比特的状态。例如,|10⟩变为|01⟩。
Craig Gidney有一篇精彩的文章,深入介绍了量子Swap门。
在这篇文章中,Craig Gidney展示了经典交换操作是如何可逆的。
在C#或Java等编程语言中,您可以使用临时变量交换变量a和b的值,如下所示
int temp = a;
a = b;
b = temp;
另一种不需要临时变量的解决方案是三次异或运算,如下所示
a ^= b;
b ^= a;
a ^= a;
这如何工作并不明显,让我们通过一个例子来解释。假设a = 810(即10002)和b = 210(即00102)。下标指定基数。让我们看看异或如何执行交换
a ^= b; // a = 1000 ^ 0010 = 1010
b ^= a; // b = 0010 ^ 1010 = 1000
a ^= b; // a = 1010 ^ 1000 = 0010
交换在没有临时变量的情况下完成。
这种方法的优点是操作是可逆的。如果我们再次运行这些步骤,值就会被换回来。回想一下,可逆性是量子门的要求。
Swap门可以用三个CNOT门实现,因为如果您还记得第二部分,CNOT门类似于经典异或。
因此,Swap门的实现可能如下所示,如图1所示。左侧是量子电路符号;右侧是其实现。
图1. 量子Swap门实现
事实上,正如Craig Gidney指出的那样,Swap门有多种实现方式,包括使用Z门和Y门。我推荐您阅读他的博客文章以获取更多详细信息。
表示Swap门的矩阵如下。
$ SWAP = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} $
我们可以看到,将Swap算子应用于两比特状态|10⟩会产生所需的结果:|01⟩
$ \begin{align} SWAP \ket{10} &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \left( \mone \otimes \mzero \right) \\[10pt] & = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 0 \\ 0 \\ 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 1 \\ 0 \\ 0 \end{bmatrix} = \ket{01} \end{align} $
非门平方根
“非门平方根”(\(\sqrt{NOT}\))门之所以得名,是因为其矩阵表示的平方等于非门(NOT)的矩阵表示。
\(\sqrt{NOT}\)门的矩阵表示如下
$ \sqrt{NOT} = \ostwo \begin{bmatrix} 1 + i & 1 - i \\ 1 - i & 1 + i \end{bmatrix} $
\(\sqrt{NOT}\)门是单比特门。它将基态|0⟩映射如下
$ \begin{align} \sqrt{NOT} \ket{0} &= \ostwo \begin{bmatrix} 1 + i & 1 - i \\ 1 - i & 1 + i \end{bmatrix} \mzero = \ostwo \begin{bmatrix} 1 + i \\ 1 - i \end{bmatrix} \\[10pt] & = \ostwo \left( \left(1 + i\right) \mzero \otimes \left(1 - i\right) \mone \right) \\[10pt] & = \frac{\left(1 + i\right) \ket{0} + \left(1 - i\right) \ket{1}}{2} \end{align} $
\(\sqrt{NOT} \ket{1}\)的计算方法相同
$ \sqrt{NOT} \ket{1} = \frac{\left(1 - i\right) \ket{0} + \left(1 + i\right) \ket{1}}{2} $
为了计算\(\sqrt{NOT}\)矩阵的平方,我们使用我们从第一部分学到的复数乘法知识。
平方√NOT
将\(\sqrt{NOT}\)矩阵的元素相乘会产生以下乘积
$ \begin{align} \left(i + 1\right)\left(i + 1\right) &= 0, \\ \left(i - 1\right)\left(i - 1\right) &= 0, \\ \text{and } \left(i + 1\right)\left(i - 1\right) &= 4 \end{align} $
我们使用这些结果来计算\(\sqrt{NOT}\)矩阵表示的平方
$ \begin{align} \left( \sqrt{NOT} \right)^2 &= \ostwo \msnot \ostwo \msnot \\[10pt] & = \frac{1}{4} \begin{bmatrix} 0 & 4 \\ 4 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} = NOT \end{align} $
正如预期的那样,它生成了NOT门的矩阵
\(\sqrt{NOT}\)门的电路图符号如图2所示。
图2. 非门平方根门电路符号
使用√SWAP门交换量子比特的一半状态
我们之前看到,Swap门用于交换两个量子比特的比特值。特别是
$ \begin{align} SWAP \ket{01} &= \ket{10} \\ \text{and } SWAP \ket{10} &= \ket{01} \end{align} $
\(\sqrt{SWAP}\)门也是一个2比特门,它将一个量子比特的状态的一部分与另一个量子比特的状态交换。其矩阵表示如下
$ \sqrt{SWAP} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \frac{1}{2}\left(1 + i\right) & \frac{1}{2}\left(1 - i\right) & 0 \\ 0 & \frac{1}{2}\left(1 - i\right) & \frac{1}{2}\left(1 + i\right) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} $
\(\sqrt{SWAP}\)门将输入状态|10⟩置于|01⟩交换状态的中途,有效地在|10⟩和|01⟩之间的中点创建了叠加。
两个\(\sqrt{SWAP}\)门串联等同于一个SWAP门。我们可以通过将矩阵表示平方来验证这一点
$ \begin{align} \sqrt{SWAP} \sqrt{SWAP} &= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \frac{1}{2}\left(1 + i\right) & \frac{1}{2}\left(1 - i\right) & 0 \\ 0 & \frac{1}{2}\left(1 - i\right) & \frac{1}{2}\left(1 + i\right) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}^2 \\[10pt] & = \mswap = SWAP \end{align} $
那里没有显示平方矩阵的计算过程。如果您想自己检查,以下乘积用于计算最终矩阵
$ \left(\frac{1}{2}\left(1 + i\right)\right)^2 = \frac{1}{2}i \\[10pt] \left(\frac{1}{2}\left(1 - i\right)\right)^2 = - \frac{1}{2}i \\[10pt] \left(\frac{1}{2}\left(1 + i\right)\right)\left(\frac{1}{2}\left(1 - i\right)\right) = \frac{1}{2} $
使用受控门
所有受控门都有一个输入,决定该门是否对状态产生影响。我们之前在看CNOT门时已经看到了这一点。如果控制量子比特的状态是|1⟩,则将门应用于目标量子比特;否则,目标量子比特保持不变。
如果我们检查受控门矩阵表示的结构,这一点就很明显。首先,让我们重新审视CNOT矩阵。它看起来像这样

底部的2×2矩阵是Pauli-X矩阵,如果控制量子比特是1,则将其应用于目标量子比特。否则,应用左上角的2×2矩阵,您会注意到它是一个单位矩阵;它对目标量子比特没有影响。
这种结构对于所有2×2门的受控版本都是相同的。我们只需将底部的(绿色)2×2值替换为当前门。
为清晰起见,这里是另一个例子。回想一下Pauli-Y矩阵是
$ Y = \begin{bmatrix} 0 & -i \\ i & 0 \end{bmatrix} $
因此,表示受控Y门的矩阵是

顺便说一句,CNOT门实际上是Pauli-X门的受控版本。它们是同一回事。
图3显示了Pauli-X(CNOT)、Pauli-Y和Pauli-Z门的量子电路符号。
控制量子比特通过一条竖线连接到目标量子比特。


图3. CNOT门、受控X门和受控Z门的电路符号
注意:您有时会看到CNOT被描绘成受控X门(一个带有X的方块)。
我们可以将这种控制机制推广到允许通过控制输入启用任何单比特门。这被称为Controlled-U门。它与现有门一起使用。它是一种将2×2矩阵转换为受控矩阵的算子。
从其下方的矩阵可以看出,需要将一个单比特门插入其中。
$ C(U) = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & u_{00} & u_{01} \\ 0 & 0 & u_{10} & u_{11} \\ \end{bmatrix} $
其用法取决于您工作的环境。例如,Q#编程语言使用 `Controlled` 语句来实现这一点,允许将其应用于任何支持它的酉算子。
两比特受控门
到目前为止,我们已经研究了单量子比特门的控制输入。Controlled-Swap(CSWAP)门(也称为Fredkin门)是一个3比特门,它为2比特Swap门添加了一个控制输入。
CSWAP门的电路图符号如下所示

CSWAP的矩阵如下所示
$ \newcommand{\mcswap}[0]{\begin{bmatrix} \rb & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & \rb & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & \rb & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & \rb & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & \rb & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & \rb & 0 \\ 0 & 0 & 0 & 0 & 0 & \rb & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & \rb \end{bmatrix}} CSWAP = \mcswap $
让我们检查一下CSWAP对状态|101⟩的影响,如下所示。CSWAP将|101⟩映射到|110⟩,正如您所预期的那样。
$ CSWAP \ket{101} = \mcswap \begin{bmatrix} 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ \rb \\ 0 \\ 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ \rb \\ 0 \end{bmatrix} $
使用双重受控门
除了CNOT之外,我们还可以使用CCNOT门(也称为Toffoli门)。与CNOT门相比,CCNOT门具有额外的控制输入;因此,名称中的额外“C”。
这是一个三比特门,如果两个控制比特都为|1⟩,则它会反转目标比特。如果任一控制比特为|0⟩,则该门不起作用。
用Yanofsky & Mannucci(2008,第172页)更简洁的说法,CCNOT门将|x,y,z⟩映射到|x,y,z⊗(x∧y)⟩
CCNOT门的电路符号如图4所示。
图4. CCNOT门电路符号
CCNOT门的真值表如下
$ \begin{array}{cc|cc} 控制 & & 目标 & \\ \hline 1 & 2 & 输入 & 输出 \\ \hline 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 0 \\ 0 & 1 & 1 & 1 \\ 1 & 0 & 0 & 0 \\ 1 & 0 & 1 & 1 \\ 1 & 1 & 0 & 1 \\ 1 & 1 & 1 & 0 \\ \end{array} $
CCNOT门是一个8×8的矩阵。
这个双重受控门的 the subject 是Pauli-X矩阵,位于右下角
$ CCNOT = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & \vc{0} & \vc{1} \\ 0 & 0 & 0 & 0 & 0 & 0 & \vc{1} & \vc{0} \end{bmatrix} $
CCNOT门的一个使用示例(在Microsoft的Q# Katas中演示)是切换一个3比特量子态的概率振幅,该量子态处于以下叠加态
$ \ket{\psi} = \alpha \ket{000} + \beta \ket{001} + \gamma \ket{010} + \delta \ket{011} + \epsilon \ket{100} + \zeta \ket{101} + \color{green}{\boldsymbol{\eta}} \ket{110} + \color{blue}{\boldsymbol{\theta}} \ket{111} $
如果我们应用CCNOT,我们将有效地切换|110⟩和|111⟩的概率振幅,如下所示
$ CCNOT \ket{\psi} = \alpha \ket{000} + \beta \ket{001} + \gamma \ket{010} + \delta \ket{011} + \epsilon \ket{100} + \zeta \ket{101} + \color{blue}{\boldsymbol{\theta}} \ket{110} + \color{green}{\boldsymbol{\eta}} \ket{111} $
通用门
在经典计算中,某些门,如NOR门,可以用来构建任何其他门。您可以使用NOR门来创建AND、OR和NOT门。NAND门也具有这种特性。NAND和NOR被认为是通用的。
在量子计算中,虽然没有单个通用门,但存在一些门集。其中一个集合是
Deutsch门在文章前面曾简要提及。它本身有可能成为一个通用门。不过,它尚未以实际形式存在。
正如Anita Ramanan指出的那样,由于可以使用一组通用门实现任何量子态,因此意味着“量子物理学允许的任何变换都可以在量子计算机上实现。”
能够模拟量子宇宙是经典计算机无法做到的,它为许多领域带来了令人兴奋的新研究途径。这是量子计算的主要动机之一。
结论
在本文中,我们继续探索量子门,并研究了一些更复杂的门。您了解了如何旋转和交换量子比特,并深入研究了受控门,这些门使您能够根据输入应用门。最后,我们讨论了量子门的通用性。
本系列到此结束。不过,我正在撰写一篇新文章,演示如何实现量子算法并在Web应用程序中使用它。事实上,我最初打算先写那篇文章,直到我意识到需要一些入门文章。发布后,我将在此页面更新链接。
感谢您的阅读,希望本文对您有所帮助。如果觉得有用,请评分和/或在下方留下您的反馈。
参考文献
- Yanofsky, N., & Mannucci, M. (2008). Quantum Computing for Computer Scientists
- Anton, H., (2000) Elementary Linear Algebra, 8th Edition, Wiley
- Nielsen, M. & Chuang, I., (2010) Quantum Computation and Quantum Information, 10th edition, Cambridge University Press, Cambridge UK
- 维基百科,量子逻辑门,2019年6月9日访问,检索自https://en.wikipedia.org/wiki/Quantum_logic_gate
- Glendinning, I., (2010) Rotations on the Bloch Sphere, 访问日期:2019年6月9日,来源:http://www.vcpc.univie.ac.at/~ian/hotlist/qc/talks/bloch-sphere-rotations.pdf
- Williams, C., (2011), Explorations in Quantum Computing, 2nd edition, Springer, https://books.google.ch/books?id=QE8S--WjIFwC
- Ramanan, A., Quantum Gates and Circuits: The Crash Course, 访问日期:2019年6月9日,来源:https://blogs.msdn.microsoft.com/uk_faculty_connection/2018/02/26/quantum-gates-and-circuits-the-crash-course/
- Fraser, G., The New Physics: For the Twenty-First Century, 第273页, Cambridge University Press, https://books.google.ch/books?id=0idvEIXwfxsC
历史