你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
对多个量子比特的运算
本文探讨用于基于单量子比特状态构建多量子比特状态的规则,并讨论组成通用多量子比特量子计算机所需包含在门集中的门运算。 这些工具是了解代码中 Q# 常用的门集所必需的。 对于量子效应(如纠缠或干扰)为什么量子计算比经典计算更强大,它们也很重要。
单量子比特和多量子比特门
当增加量子比特数时,量子计算的真正强大功能才变得明显。 单个量子比特具有一些反直观功能,例如能够在给定时间处于多个状态。 但是,如果你在量子计算机中拥有的只是单量子比特门,那么计算器,当然,经典超级计算机会使它的计算能力相形见绌。
量子计算能力之所以能够实现,在某种程度上是因为量子状态向量的向量空间维度随着量子比特数的增加呈指数级增长。 这意味着,虽然可以对单个量子比特进行完全建模,但模拟具有 50 个量子比特的量子计算也许可以突破现有超级计算机的极限。 增加计算的大小只有一个额外的量子比特 会增加 存储状态所需的内存,并大致 将 计算时间翻倍。 正是凭借计算能力的这一迅速翻倍,量子比特数相对较少的量子计算机对某些计算任务的处理能力才能远远超过当今和未来的功能最强大的超级计算机。
双量子位状态
如果你有两个单独的量子比特,一个处于状态$\psi=\begin{bmatrix}\\\beta\end{bmatrix}$\alpha,另一个处于状态\end{bmatrix}$\\\gamma\delta$\phi=\begin{bmatrix},则相应的双量子比特状态由矢量的张量乘积(或克朗克乘积)提供,定义如下
$$\psi\otimes\phi=\begin{bmatrix}\alpha\\\beta\end{bmatrix}\otimes\begin{bmatrix}\gamma\\\delta\end{bmatrix}=\begin{bmatrix}\alpha\begin{bmatrix}\gamma\\\delta\end{bmatrix}\\\beta\begin{bmatrix}\gamma\\\delta\end{bmatrix}\end{bmatrix}=\begin{bmatrix}\alpha\gamma\\\alpha\delta\\\beta\gamma\\\beta\delta\end{bmatrix}。 $$
因此,给定两个单量子比特状态 $\psi$ ,并且 $\phi$每个维度 2 的对应双量子比特状态 $\psi\otimes\phi$ 为 4 维。 向量
$$\begin{bmatrix}\alpha_{{00}\\\alpha___{{01}\\\alpha{{10}\\\alpha{{11}\end{bmatrix}$$
表示两个量子比特上的量子状态(如果)
$$|\alpha_{00}|^2+_{01}|^2+|\alpha|\alpha_{10}|{^2+|\alpha_{{11}|^2=1。$$
更概括地说,你可以看到,$n$ 个量子比特的量子状态由维数为 $2 \cdot 2 \cdot 2 \cdots= 2^n$ 的单位向量 $v_1 \otimes v_2 \otimes\cdots\otimes v_n$ 使用此构造表示。 与单个量子比特一样,多个量子比特的量子状态向量也保存描述系统行为所需的所有信息。 有关向量和张量积的详细信息,请参阅量子计算中的向量和矩阵。
双量子比特状态的计算基础由一量子比特基态的张量积构成。 例如,你有
$$\begin{\begin{align}00 \equiv\begin{bmatrix}1 \\ 0\begin{bmatrix}\end{bmatrix}\otimes 1 \\ 0 \end{bmatrix}&=\begin{bmatrix}1 \\ 0 0\\ 0\end{bmatrix}\\,\qquad 01\begin{bmatrix}\equiv 1 \\ 0 0 \\ \end{bmatrix}\otimes\begin{bmatrix}1=\end{bmatrix}\begin{bmatrix} 0 \\ 1\\ 0 0 0\\\end{bmatrix},\\ 10\begin{bmatrix}\equiv 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix}1 \\ 0&\end{bmatrix} amp;=\begin{bmatrix}0 0 1 0, 11 \equiv\begin{bmatrix}0 \\ 1\begin{bmatrix}\end{bmatrix}\otimes 0 \\ 1=\end{bmatrix}\begin{bmatrix} 0 0 \\ 0\\ 1.\end{bmatrix}\\\qquad \end{bmatrix}\\\\ \\ \end{align} $$
请注意,虽然始终可以采用两个单量子比特状态的张量积形成双量子比特状态,但并非所有双量子比特量子态都可以编写为两个单量子比特状态的张量积。 例如,没有状态 $\psi=\begin{bmatrix}\alpha\\\beta\end{bmatrix}$ 和 $\phi=\begin{bmatrix}\gamma\\\delta\end{bmatrix}$,因此其张量积为状态
$$\psi\otimes\phi=\begin{bmatrix} 1/\sqrt{{2}\\ 0 \\ 0 \\ 1/\sqrt{{2}\end{bmatrix}.$$
此类双量子比特状态不能写为单量子比特状态的张量积,称为“纠缠状态”;我们将这两个量子比特视为纠缠在一起。 大致来说,由于量子状态不能视为单量子比特状态的张量积,因此状态所保存的信息并不仅限于单个量子比特。 相反,在两个状态之间的关联中,信息存储在非本地。 这种信息的非局部性是量子计算在传统计算上的主要区别特征之一,对于包括量子误差更正在内的许多量子协议至关重要。
测量双量子比特状态
双量子比特状态测量与单量子比特测量非常相似。 如果测量状态
$$\begin{bmatrix}\alpha_{{00}\\\alpha___{{01}\\\alpha{{10}\\\alpha{{11}\end{bmatrix}$$
会得出 $00$ 的概率为 $|\alpha_{{00}|^2$,$01$ 的概率为 $|\alpha_{01}|^2$,$10$ 的概率为 $|\alpha_{{10}|^2$,$11$ 的概率为 $|\alpha_{11}|^2$。 我们有意命名了变量 $\alpha_{00}、\alpha_{{01}、\alpha_{{10},$ 和 $\alpha_{11}$,以使此连接清晰明了。 测量后,如果结果为 $00$,则双量子比特系统的量子状态已折叠,现在为
$$ 00 \equiv\begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix}。 $$
还可以只测量两量子比特量子态的一个量子比特。 仅测量两个量子比特状态的一个量子比特时,度量的影响与测量两个量子比特的影响略有不同。 这是因为整个状态不会折叠到计算基础状态,而是仅折叠为一个子系统。 换句话说,测量双量子比特状态的一个量子比特只会将相关子系统折叠到计算基础状态。
若要查看这一点,请考虑测量以下状态的第一个量子比特,这是通过将 Hadamard 转换 $H$ 应用于最初设置为 quot 的 &两个量子比特而形成的:0" 状态:
$$H^{\otimes 2}\left(\begin{bmatrix}1 \\ 0 1 \\ 0\right\begin{bmatrix}\end{bmatrix}\end{bmatrix}\otimes ){1}{2}\begin{bmatrix}\frac{=& 1 amp; 1 amp; &\\ &&1 amp; 1 amp; -&1 amp; -1 amp; &-1 amp; -\\&1 amp; -1 amp; &&-&\\1 amp; -1 amp; -&1 amp; -&\\\end{bmatrix}\begin{bmatrix}1 amp; 1 1 0\\ 0\\ 1 1 1\end{bmatrix}\mapsto\\\begin{cases}\text{\\ 结果 }=0 \frac{\end{bmatrix}\frac{{1}{\sqrt{2}}\begin{bmatrix}={1}{2}\begin{bmatrix}\\ &1 1\\ 0 0\text{\end{bmatrix}\\\\ 结果 }=1 & \frac{{1}{\sqrt{{2}}\begin{bmatrix}\\0\\ 0\\ 1 1\\\end{bmatrix}\\\end{cases}. $$ 这两个结果都有 50% 的发生概率。 如果第一个量子比特上将 0$ 交换为 $1$,则测量前的量子状态不会改变$这一事实。
用于测量第一个或第二个量子比特的数学规则很简单。 让e_k作为 k^{\rm 的}$计算基础向量,S $$ 是所有$e_k$集,以便有问题的$量子比特获取该值 1$ 作为 k$ 的值$。$$$ 例如,如果有兴趣测量第一个量子比特 $,则 S$ 将包含 $e_1\equiv 10$ 和 $e_3\equiv 11$。 同样,如果对第二个量子比特 S 感兴趣,则第二个量子比特 $S 由 e_2\equiv 01$ 和 $e_3 \equiv 11$ 组成$$。 那么,将所选量子比特测量为 $1$ 的概率针对状态向量 $\psi$
$$ P(\text{结果}=1)集 } S}\psi^\dagger e_k e_k^\dagger\psi 中的 =\sum_{e_k \text{。 $$
注意
本文使用 little-endian 格式来标记计算基础。 在 little endian 格式中,重要性最低的位在最前面。 例如在 little-endian 格式中,第四位由位 001 的字符串表示。
由于每个量子比特测量只会得出 $0$ 或 $1$,因此测量为 $0$ 的概率只有 $1-P(\text{结果}=1)$。 这就是为什么只需要一个公式来测量 $1$ 的概率。
此类测量对状态的作用可以在数学上表示为
$$\psi\mapsto\frac{\sum_集 } S} e_k e_k^\dagger\psi}{\sqrt{ 中的 {e_k \text{P(\text{结果}=1)}}。 $$
谨慎的读者可能会担心如果分母为零会发生什么。 虽然这种状态未定义,但无需担心此类可能性,因为概率为零!
如果你要 $\psi$ 成为上面给定的统一状态向量,并且有兴趣测量第一个量子比特,则
$$ P(\text{第一个量子比特的测量}=1) = (\psi^\dagger e_1)(e_1^\dagger\psi)+(\psi^\dagger e_3)(e_3^\dagger\psi)=|e_1^\dagger\psi|^2+|e_3^\dagger\psi|^2。 $$
请注意,这只是测量结果 $10$ 和 11$ 的预期两个概率之和$。 对于我们的示例,其计算结果为
$$\frac{{1}{4}\left|\begin{bmatrix}0&0&1&0\end{bmatrix}\begin{bmatrix}1 1\\\\ 1 1\\\end{bmatrix}\right|^2+\frac{1}{{4}\left|\begin{bmatrix}0&0&0&1 1\end{bmatrix}\begin{bmatrix}1 1 1 1\\\end{bmatrix}\right|^2。=\frac{{2}{1}{\\\\ $$
这完全匹配我们的直觉。 同样,将第一个量子比特测量为 $1$ 后的状态可以编写为
$$\frac{\frac{e_1}{2}+\frac{e_3}{2}}{\sqrt{\frac{1}{2}}}=\frac{1}{\sqrt{2}}\begin{bmatrix} 0\\ 0\\ 1\\ 1\end{bmatrix}$$
这同样与我们的直觉一致。
双量子比特运算
与单量子比特案例一样,任何酉变换都是对量子比特有效的运算。 一般来说,对 $n$ 个量子比特应用的酉变换是大小为 $2^n \times 2^n$ 的矩阵 $U$(因此它作用于大小为 $2^n$ 的向量),因此 $U^{-1}= U^\dagger$。 例如,受控反闸门 (CNOT) 是一个常用的双量子比特门,并由以下酉矩阵表示:
$$\operatorname{CNOT}=\begin{bmatrix} 1\ 0\ 0\ 0 \\ 0\ 1\ 0\ 0 \\ 0\ 0\ 0\ 1 \\ 0\ 0\ 1\ 0 \end{bmatrix}$$
我们还可以通过对两个量子比特应用单量子比特门来构成双量子比特门。 例如,如果应用入口
$$\begin{bmatrix} a\ b\\ c\ d \end{bmatrix}$$
和
$$\begin{bmatrix} e\ f\\ g\ h \end{bmatrix}$$
分别应用于第一个和第二个量子比特,这相当于应用其张量积给出的双量子比特单位: $$\begin{bmatrix} a\ b\\ c\ d \end{bmatrix}\otimes\begin{bmatrix} e\ f\\ g\ h \end{bmatrix}=\begin{bmatrix} ae\ af\ be\ bf \\ ag\ ah\ bg\ bh \\ ce\ cf\ de\ df \\ cg\ ch\ dg\ dh.\end{bmatrix}$$
因此,可以通过获取一些已知单量子比特门的张量积来形成双量子比特门。 两量子比特门的一些示例包括 $H H$\otimes、$X \otimes\mathbf{1}$和 $X \otimes Z$。
请注意,虽然任意两个单量子比特门通过使用其张量积来定义一个双量子比特门,但反之并不成立。 并非所有双量子比特门都可以写为单量子比特门的张量积。 此类门称为纠缠门。 CNOT 门是纠缠门的一个示例。
受控非门背后的直觉可以泛化为任意门。 一般情况下,受控门是充当标识的门,除非特定的量子比特为 $1$。 使用 _x(U)$表示在标记 $x$$\Lambda 的量子比特上,在本例中控制受控的一元。 例如,$\Lambda_0(U) e_{{1}\otimes{\psi}=e_{1}\otimes U{\psi}$ 和 $\Lambda_0(U) e_{{0}\otimes{\psi}=e_{{0}\otimes{\psi}$,其中 $e_0$ 和 $e_1$ 是单个量子比特的计算基础向量,这两个分别对应于值 $0$ 和 $1$。 例如,请考虑以下受控 Z$$ 门,然后你可以将其表示为
$$\Lambda_0(Z)=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&-1 \end{bmatrix}=(\mathbf\mathbf{1}\otimes{ H)\operatorname{CNOT}(\mathbf{1}\otimesH)。 $$
如何高效地构建受控么正运算是一项重大挑战。 实现此目标的最简单方法是:构建基本门的受控版本的数据库,并将原始么正运算中的每个基本门替换为其等效的受控版本。 通常,这很浪费时间,借助明智的见解,我们只需将几个门替换为受控版本即可获得相同的效果。 因此,框架提供了执行控制方法的天真方法,或者允许用户定义统一控制的版本(如果已知的优化手动调整版本)。
门也可以使用经典信息进行控制。 例如,经典受控非门只是一个普通非门,但仅当经典位是 $1$ 而非量子比特时才会应用。 从这种意义上讲,可以将经典受控门视为量子代码中的 if 语句,其中的门仅应用于代码的一个分支。
与单量子比特案例一样,如果使用双量子比特门集中的门的积能够以任意精度准确计算任何 $4\times 4$ 酉矩阵,则该门集是通用的。 通用门集的示例包括阿达马门、T 门和 CNOT 门。 通过获取这些门的产品,可以在两个量子位上近似任何一元矩阵。
多量子比特系统
我们采用与双量子比特案例中所述完全相同的模式,基于较小的系统构建多量子比特量子状态。 此类状态通过构成较小状态的张量积来构建。 例如,考虑在量子计算机中编码位字符串 $1011001$。 可以将此编码为
$$ 1011001 \equiv\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 1 \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1 \end{bmatrix}。 $$
量子门的工作原理与此完全相同。 例如,如果要将 $X$ 门应用到第一个量子比特,然后在第二个和第三个量子位之间执行 CNOT,则可以将此转换表示为
\begin{\begin{align}&放大 器;(X \otimes\operatorname{CNOT}_{{12}\otimes\mathbf{1}\otimes \mathbf{\otimes\mathbf{1} \mathbf{\otimes\mathbf{1} \mathbf{\mathbf{1}) \begin{bmatrix} 0 \\ 1 1 \end{bmatrix}\otimes\begin{bmatrix} \\ 0 0 \\\begin{bmatrix} \end{bmatrix}\otimes1 \end{bmatrix}\otimes\begin{bmatrix} 0 \\ 1\begin{bmatrix}\otimes\end{bmatrix} 1 0 1 \\ \\ 0 \end{bmatrix}\otimes\begin{bmatrix} 0\begin{bmatrix} \end{bmatrix}\otimes0 \\ 1 \end{bmatrix}\\&\qquad\qquad\equiv0011001. \end{align}
在许多量子比特系统中,通常需要分配和解除分配用作量子计算机的临时内存的量子比特。 这种量子比特称为“辅助”。 默认情况下,可以假定量子比特状态在分配时初始化为 $e_0$ 。 可以进一步假设在解除分配之前再次将其 $返回到e_0$ 。 此假设很重要,因为如果辅助量子比特在解除分配时与另一个量子比特寄存器纠缠在一起,则解除分配过程会损坏辅助量子比特。 因此,始终假定此类量子比特在释放之前已恢复到其初始状态。
最后,我们需要向门集添加新门才能为双量子比特量子计算机实现通用量子计算,而多量子比特案例不需要引入任何新门。 门 $H$、$T$ 和 CNOT 构成了针对多个量子比特的通用门集,因为任何通用酉变换都可以分为一系列双量子比特旋转。 然后,可以利用为双量子比特事例开发的理论,并在有许多量子比特时再次使用它。
注意
虽然到目前为止使用的线性代数表示法当然可用于描述多量子比特状态,但随着状态的大小增加,它变得越来越繁琐。 例如,长度为 7 位的字符串的结果列向量为 $128$ 维,这导致使用前述表示法来表示该向量变得非常棘手。 相反, Dirac 表示法是简化量子态表示形式的符号简写。 有关详细信息,请参阅 Dirac 表示法。