考虑到世界上第一个可编程量子光子芯片的发布,我想知道用于使用量子纠缠的计算机的软件是什么样的。我写过的第一个程序就是
for i = 1 to 10
print i
next i
谁能以伪代码或高级语言给出使用量子光子芯片(或类似硬件)的相当简单的代码示例?我很难使概念从传统编程过渡到纠缠等。
考虑到世界上第一个可编程量子光子芯片的发布,我想知道用于使用量子纠缠的计算机的软件是什么样的。我写过的第一个程序就是
for i = 1 to 10
print i
next i
谁能以伪代码或高级语言给出使用量子光子芯片(或类似硬件)的相当简单的代码示例?我很难使概念从传统编程过渡到纠缠等。
Answers:
请注意:以下内容对我自己在质量控制领域的研究和看法有很大的偏见。这并不构成该领域的普遍共识,甚至可能包含一些自我促进。
显示量子计算的“世界世界”的问题在于,与Leibnitz或Babbage所使用的当前量子计算机相比,我们与量子计算机的距离仍然很远。尽管我们知道它们在理论上应该如何操作,但没有标准的方法可以实际构建物理量子计算机。这样做的副作用是,没有单一的量子计算编程模型。诸如Nielsen等人的教科书。会为您显示一个“量子电路”图,但与正式的编程语言相去甚远:它们在诸如经典控制或处理输入/输出/测量结果等细节上有点“挥霍”。
作为编程语言计算机科学家,使我最适合我的研究,并让QC广受其他计算机科学家的启发,是使用我遇到的最简单的QC模型来完成所有工作。
我见过的包含所有基本要素的最简单的量子计算程序是我遇到的最简单的量子编程模型中的一个小型三指令程序。我会像使用“ hello world”一样了解基础知识。
请允许我简要介绍一下Danos等人的The Measurement Calculus。1 所基于的1是基于单向量子计算机2的:量子位在测量时被破坏,但是测量它会影响与其纠缠的所有其他量子位。与光子芯片实现的“基于电路的”量子计算机相比,它具有一些理论上和实践上的好处,但这是一个不同的讨论。
考虑一个只有五条指令的量子计算机:N,E,M,X和Z。它的“汇编语言”类似于您的常规计算机,执行一条指令后,它将转到顺序中的下一条指令。每条指令都有一个目标qubit标识符,我们在这里只使用一个数字和其他参数。
N 2 # create a new quantum bit and identify it as '2'
E 1 2 # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0 # measure qubit '1' with an angle of zero (angle can be anything in [0,2pi]
# qubit '1' is destroyed and the result is either True or False
# operations beyond this point can be dependent on the signal of '1'
X 2 1 # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'
因此,以上程序创建了一个辅助函数,将其与输入量子位纠缠在一起,测量输入,并根据测量结果对辅助函数进行操作。结果是,在Hadamard操作之后,量子位2现在包含量子位1的状态。
上面的代码自然处于较低的水平,您不希望对其进行手动编码。测量演算的好处在于,它引入了“模式”,即某种可组合的宏,可让您像使用子例程一样编写更大的算法。您从1指令模式开始,然后从那里成长更大的模式。
除了像汇编程序一样的指令序列外,还通常将程序记录为图形:
input .........
\--> ( E ) ---> (M:0) v
(N) ---> ( ) ------------> (X) ---> output
其中,全箭头是qubit依赖性,而虚线箭头是“信号”依赖性。
以下是在一个小的编程工具中表达的相同的Hadamard示例,就像我想象的“量子程序员”将使用的那样。
编辑:(添加与“经典”计算机的关系)经典计算机在其最擅长的方面仍然非常有效,因此,愿景是将量子计算机用于卸载某些算法,类似于当前计算机如何将图形卸载到计算机。 GPU。如上所示,CPU将通过向量子计算机发送指令流并从布尔“信号”中读取测量结果来控制量子计算机。这样,您就可以将经典控制(由CPU和量子状态以及对量子计算机的影响)严格分开。
例如,我将使用我的量子协处理器来计算随机布尔值或cointoss。古典计算机是确定性的,因此很难返回一个好的随机数。量子计算机本质上是概率性的,要获得随机0或1,我要做的就是测量出一个均衡的量子比特。CPU和“ QPU”之间的通信如下所示:
qrand() N 1; M 1 0;
==> | CPU | ------------> | QPU | ==> { q1 } , []
start()
| | ------------> | | ==> { } , [q1: 0]
read(q1)
| | ------------> | |
q1: 0
0 | | <----------- | |
<==
{ ... }
QPU包含量子位的量子存储器在哪里,QPU [...]
包含布尔值的经典(信号)存储器在哪里。
我假设C的libquantum,Haskell的量子单子或Perl的Quantum :: Entanglement都忠实地表示量子计算。您可以看一下他们的例子。
通常,您将量子算法描述为一种经典算法,该算法将一系列线性运算符应用于代表量子系统状态的叠加位置。期刊文章经常描述一种电路,其中带有用于量子位/寄存器的线和用于线性算子的框。
当然,最困难的部分不是描述算法,而是像概率算法一样理解其工作原理。我一直认为Grover的算法很容易理解。您还可以阅读有关Shor算法使用的量子傅立叶变换的信息。
您也可以使用真正的量子处理器。转到此处并注册:http : //www.research.ibm.com/quantum/
它还包括一个模拟器,因此您可以在不使用实际硬件的情况下进行测试,或者使用信用(免费)在实际硬件上运行。
LanQ中Deutsch算法的 Checkout实现。
我认为答案是“很像一个简单的经典程序”。
如果我们将简单类型的lambda微积分(带有乘积)视为经典编程的核心,那么我们可以利用它是封闭笛卡尔类别的内部类型理论,这为我们提供了一个指针。
那么,如果STLC是笛卡尔封闭类别,那么封闭对称单项类别是什么?好吧,我们知道对称单项类别的内部逻辑是MILL。因此,我们需要一种与MILL相对应的类型理论-线性类型理论。
摆脱抽象的废话,我们从线性类型理论中得到什么?线性度。我们得到资源的线性。这正是我们想要的。不允许您克隆量子位。不允许您隐式衡量。线性意味着在还原过程中您无法执行任何一项操作。
关于线性类型理论已经有一些工作,但还不多。我从这篇文章中得到了一些想法:物理,拓扑,逻辑和计算: Mike Stay和John Baez撰写的Rosetta Stone,这比我的挥手要详尽得多。
我可能会从一个简单的“除以小n”计数器实现开始。
例如:给定10GHz的源,生成5GHz的输出(但是这些数字是任意的,仅用于说明概念)。
这使我们可以忽略诸如存储和冯·诺依曼体系结构之类的问题,而让我们关注组件是否实际上在做可理解的事情。
那么,下一个目标将是建立一个小的“小n”库(但是我也将听听研究人员的回击-如果他们认为其他小目标会更加立竿见影,我当然想了解他们在告诉我什么。)
长期目标将包括将信息泵入系统或从系统中泵出并保持足够长时间以使用它的信息的机制。
(可能值得记住的是,早期的计算机程序都是“硬连线的”。只有在拥有这些系统的丰富经验之后,我们才能够实现存储的程序。)
我认为对量子计算机进行编程应该从不同的角度看待普通的面向对象编程。
QC具有与大脑相同的思考和决策能力。思考能力具有对数据源进行数据挖掘的能力,这将是可能的选择,并决定从所有可能的状态中进行选择。
此时,需要以一种这样的方式来构建软件:量子位表示可以进行数据挖掘并与其他数据组纠缠的数据源。
QC应该有一个数据挖掘器来处理数据读取,将不同的选项链接到呈现信息的数据源的不同组中,读取所有可能的状态并选择继续进行下去。
那就是我们的大脑如何运作。QC能够理解量子力学定律并据此采取相应的行动,这意味着您提出了一个问题,QC向您展示了解决该问题的所有可能解决方案。
您同意QC如此强大吗?
https://www.cs.rutgers.edu/~mlittman/papers/openhouse11.pdf 这是开始的要点,然后创建一个数据挖掘器来构建带有门等的量子设备,将读取器连接到该数据挖掘器,进行读取和提供反馈意见。Quantum Datasource组件托管数据以及Dataminer行为所在的知识范围。