量子比特
正如比特是经典计算中信息的基本对象, 量子比特 (量子比特)是量子计算中信息的基本对象。 为了理解这种对应关系,我们来看一个最简单的例子:一个量子位。
代表一个量子比特
虽然一位或二进制数字可以具有0或1的值,但量子位可以具有这些值中的任何一个或者是0和1的量子叠加。 单个量子位的状态可以用单位范数的二维列向量来描述,也就是说,其条目的幅度平方必须总和为1。 这个向量称为量子态矢量,它拥有描述一个量子位量子系统所需的所有信息,就像一个位包含描述二进制变量状态所需的所有信息一样。
任何具有范数1的实数或复数的二维列向量表示量子位可能存在的量子态。 因此,如果 和 是满足的复数,满足 表示量子位的有效量子状态向量的一些例子包括
量子状态向量是一个特殊的角色。 这两个向量构成描述量子比特状态的向量空间的基础。 这意味着任何量子状态向量都可以写成这些基向量的和。 具体来说,可以将矢量 写为。 虽然这些向量的任何旋转都可以作为量子位的完美有效基础,但我们选择通过将其称为计算基础来赋予这个向量特权。
我们把这两个量子态对应于经典位的两个状态,即0和1。 标准惯例是选择尽管也可以采取相反的选择。 因此,在无限数量的可能的单量子位量子状态向量中,只有两个对应于经典位状态; 所有其他量子态都不会。
衡量一个量子比特
现在我们知道如何表示一个量子位,我们可以通过讨论度量的概念来获得这些状态所代表的直觉。 测量对应于“查看”量子位的非正式想法,其立即将量子态坍塌到两个经典状态之一 。 当量子状态向量 给出的量子位被测量时,我们获得结果0,概率为,结果为1,概率为。 在结果0上,量子位的新状态是 ; 对于结果1,其状态是 。 请注意,由于归一化条件,这些概率总和为1。
测量的性质也意味着量子状态向量的整体符号是不相关的。 否定矢量相当于
。 因为测量0 和1 的概率取决于术语的幅度平方,因此插入这些符号并不会改变概率。 这些阶段通常被称为“全球阶段”,通常可以是 的形式,而不仅仅是 。测量的最终重要属性是它不一定会损坏所有的量子状态向量。 如果我们从状态 开始,它对应于经典状态0,那么测量这个状态将总是产生结果0,并保持量子态不变。 在这个意义上,如果我们只有经典比特(即,量子比特是 ),那么测量不会损坏系统。 这意味着我们可以复制经典数据并在量子计算机上进行操作,就像在传统计算机上一样。 然而,将信息同时存储在两种状态中的能力是将量子计算提升到超越经典可能性的水平,并进一步使量子计算机不分青红皂白地拷贝量子数据的能力,也参见无克隆定理 。
使用Bloch球体可视化Qubits和转换
使用Bloch球体表示法,也可以在3D中绘制Bloch 。 布洛赫球给出了一种将单量子位量子态(这是一个二维复矢量)描述为三维实值向量的方法。 这很重要,因为它可以让我们对单量子比特状态进行可视化,从而开发推理,这对理解多量子比特状态(可惜布洛赫球体表示失效)非常重要。 Bloch球体可以如下显示:
该图中的箭头显示量子状态向量指向的方向,并且箭头的每个变换可以被认为是关于其中一个主轴的旋转。 虽然将量子计算看作一系列旋转是一个强大的直觉,但使用这种直觉来设计和描述算法是一个挑战。 Q#通过提供描述这种旋转的语言来缓解这个问题。
单一量子比特操作
量子计算机通过应用可模拟量子状态向量的任何旋转的通用量子门来处理数据。 这种普遍性的概念类似于传统(即经典)计算的普遍性概念,其中如果可以使用有限长度的电路来执行输入比特的每个变换,则门集合被认为是通用的。
在量子计算中,我们允许在量子位上执行的有效变换是幺正变换和测量。 伴随运算或复共轭转置对量子计算至关重要,因为它需要反转量子转换。 Q#通过提供自动将门序列编译为伴随的方法来反映这一点,这使得程序员无需在许多情况下手动编码伴随。
在传统计算机上只有四种功能将一位映射到一位。 相比之下,量子计算机上的单个量子位上存在无限次的幺正变换。 因此,称为门的原始量子操作的有限集合可以精确地复制量子计算中允许的无限幺正变换集合。 这意味着,与经典计算不同,量子计算机不可能精确地使用有限数量的门来实现每个可能的量子程序。 因此量子计算机不能像传统计算机那样具有普遍性。 因此,当我们说一组门对于量子计算是普遍的时 ,我们实际上意味着比经典计算的意义稍弱一些。 对于通用性,我们要求量子计算机仅使用有限长度的门序列在有限误差内逼近每个酉矩阵。 换句话说,如果任何幺正变换可以近似写为该组中的门的乘积,那么一组门就是通用门组。 我们要求对于任何规定的误差界限,存在来自门集合的门G1,G2, ...,GN,例如
请注意,由于矩阵乘法的约定是从右到左乘以该序列中的第一个门操作,GN实际上是应用于量子状态向量的最后一个操作。 更正式地说,如果对于每个容错 >0存在G1, ...,GN这样的GN ...G1和U之间的距离是最多 。 理想情况下,达到这个距离所需的N值应该以1/ 的多对数形式进行缩放。
这种通用门套在实践中看起来如何? 最简单的这种用于单量子比特门的通用门设置仅由两个门组成:Hadamard H
和所谓的T -gate(也称为 /8门):
但是,由于与量子纠错有关的实际原因,考虑更大的门限设置可以更方便,即可以使用H和T生成的门设置。 我们可以将量子门分为两类:克利福德门和T -gate。 这个细分是有用的,因为在许多量子纠错方案中,所谓的Clifford门很容易实现,也就是说,它们在操作和量子比特方面需要非常少的资源来容忍地实现故障,而非Clifford门需要相当昂贵容错。 Q#中默认包含的标准单量子比特克利福德门包括
在这里操作X,Y和Z被特别频繁地使用,在创建者Wolfgang Pauli之后被命名为Pauli操作员 。 与非克利福德门(T-gate)一起,这些操作可以被组合以近似任何单一量子位上的幺正变换。
作为如何从这些原始图像构建酉变换的例子,上面Bloch球体中描绘的三个变换对应于门控序列 。
虽然以前构成了用于描述堆栈的逻辑层面上的操作的最流行的原始门(将逻辑层级看作量子算法的层次),但是例如在算法层面考虑较不基本的操作通常是方便的,例如操作更接近功能描述级别。 幸运的是,Q#还提供了用于实现更高级单元的方法,这反过来又允许实现高级算法,而无需将所有内容明确分解为Clifford和T-gates。
最简单的这种基元是单个量子位旋转。 通常考虑三种单量子位旋转:Rx,Ry和Rz。 例如,想象一下旋转Rx的动作,想象一下沿着Bloch球体x轴的方向指向右手拇指,并用手旋转矢量,角度为 /2弧度。 这个令人困惑的因素是2,这是因为在布洛赫球上绘制的正交向量相差180美元,但实际上几何上相差90美元/圈。 相应的酉矩阵是:
正如任何三个旋转可以组合在一起以执行三维的任意旋转一样,从布洛赫球表示可以看出,任何酉矩阵也可以被写为三个旋转的序列。 具体而言,对于每个酉矩阵U,存在 ,使得。 因此,Rz和H也形成一个通用门集,尽管它不是一个离散集,因为 可以取任何值。 出于这个原因,并且由于在量子模拟中的应用,这种连续的门对于量子计算是至关重要的,尤其是在量子算法设计水平。 最终,为了实现容错硬件实现,它们最终将被编译为非常接近这些旋转的离散门序列。