Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
187 lines (151 sloc) 7.77 KB

简介

QRunes是由本源量子推出的量子指令集。量子指令集是一种运行在量子计算机上的一组基本指令,它可以直接控制量子计算机的运行。QRunes可以从一个很低级的层次直接描述量子程序、量子算法,它的地位类似于经典计算机中的硬件描述语言或者汇编语言。

特别要提到的是,QRunes的设计目的是为了直接操纵量子计算机的动作,在一个QRunes程序中,只包含了量子计算机一次执行所需要进行的动作。也就是说,这一组指令集不包含任何逻辑判断。不论是Quantum Data, Classical Control还是Quantum Data, Quantum Control,或者这个语言所不具备的变量系统,都将以更高层次的量子语言去封装。


基本语法

QRunes的语法十分直接,基本采用了“指令+参数列表”的设计方法,例如指令定义了使用的量子逻辑门,参数中描述作用的量子比特序号。一个简单的量子程序的例子如下:

% Comment: QRunes Example1
QINIT 2
% Define and initialize 2 qubit
CREG 2
% Define 2 classical register (boolean value) for saving measurement result
H 0
CNOT 0,1
% Perform a series of quantum logic gates
MEASURE 0,$0
MEASURE 1,$1
% Perform measurement, results will be saved and export.

下面会逐条解释每一行的作用

%comment

由%开始,到该行的结尾,是程序的行注释,就类似于C语言的”//”。注释的语句会被完全忽略。

QINIT 2

定义2个量子比特,并将它们初始化到|0〉状态。一个量子程序中第一行(除注释之外)必须显式定义量子比特数。特别地,在网页的量子程序编辑器中,这一行是隐藏的,在点击“运行”后,这一行定义将被自动附带到程序的开头。

CREG 2

定义2个经典寄存器。一个量子程序中第二行(除注释之外)必须显式定义经典寄存器数。经典寄存器是布尔型变量,它是一个经典计算机中的值,并且被初始化到0。经典计算机被用于控制量子计算机的运行,换言之,量子计算机无法脱离经典计算机单独运行。在量子计算机运行时,所有的测量值都会被保存到经典计算机上并且导出。特别地,在网页的量子程序编辑器中,这一行也是隐藏的,在点击“运行”后,这一行定义将被自动附带到程序的第二行。

H 0

单比特Hadamard门作用在0号量子比特上。量子比特的编号是从0开始的,和一般的程序语言类似。QRunes指定操作的量子比特都是用整型变量描述的。定义了n个比特,合法的整型变量的范围即为0~n-1。

CNOT 0,1

两比特CNOT门作用在0,1上。特别要指出的是,对于控制门来说,最右的变量是受控的目标比特。这个原则对TOFFOLI门同样成立。

MEASURE 0,$0

测量0号量子比特,结果保存到第0个经典寄存器上。$x指定了第x个经典寄存器的位置。


指令集

初始化

QINIT

解释:量子态的初始化操作,输入参数为量子比特数目,功能是将所有量子比特置为|0⟩态; 例子:

QINIT 5 
%定义5个量子比特,初态置为|00000>

CREG

解释:定义保存测量结果的经典寄存器的个数,输入参数为要定义的经典寄存器的个数。经典寄存器的数目一般与最后测量的量子比特数目一致。 例子:

CREG 2
%定义两个经典寄存器

单比特门

H / HADAMARD

解释:单比特Hadamard门,输入参数为目标量子比特序号,功能是对目标量子比特执行Hadamard操作。 例子:

H 4
%对编号为4的量子比特执行Hadamard操作

RX / RY / RZ

解释:单比特RX/RY/RZ门,输入参数为目标量子比特序号n和弧度制表示的角度θ,功能是对n号量子比特执行RX/RY/RZ操作;RX/RY/RZ分别表示在Bloch球上绕X/Y/Z轴逆时针旋转θ。 例子:

RY 3,”3.141592653”
%对3号量子比特绕其Bloch球的Y轴旋转π

NOT

解释:单比特NOT门,即量子非门,输入参数为目标量子比特序号,功能是目标量子比特执行NOT操作。 例子:

NOT 1
%1号量子比特执行NOT操作

两比特门

CNOT

解释:两比特CNOT门,输入参数为控制量子比特序号,目标量子比特序号,功能是对这两个量子比特执行CNOT操作。 例子:

CNOT 3,2
%3号量子比特为控制量子比特,2号量子比特为目标量子比特,对其执行CNOT操作。

ISWAP

解释:两比特ISWAP门,输入参数为两个量子比特的序号,功能是执行ISWAP操作 例子:

ISWAP 2,3
%对2号量子比特和3号量子比特执行ISWAP操作

SQISWAP

解释:两比特SQISWAP门,输入参数为两个量子比特的序号,功能是执行SQISWAP操作 例子:

SQISWAP 2,3
%对2号量子比特和3号量子比特执行SQISWAP操作

三比特门

TOFFOLI

解释:三比特TOFFOLI门,输入参数为两个控制量子比特和一个目标量子比特的序号,功能是执行TOFFOLI门操作 例子:

TOFFOLI 1,2,3
%1号和2号量子比特为控制量子比特,3号量子比特为目标量子比特,对这三个量子比特执行TOFFOLI门操作

特殊控制语句

CONTROL & ENDCONTROL

解释:CONTROL控制语句,起始标识是CONTROL,终止标识是 ENDCONTROL,输入参数是量子比特序号n,功能是在CONTROL和ENDCONTROL之间的语句都是受控操作,控制量子比特是n好量子比特。CONTROL&ENDCONTROL语句之间可嵌套CONTROL&ENDCONTROL语句,对应规则是ENDCONTROL对应的CONTROL是离其最近的CONTROL,CONTROL与ENDCONTROL一一对应。 例子:

CONTROL 2
H 1
CNOT 1,3
RX 4,”3.141592653”
ENDCONTROL 2
%2号量子比特为控制量子比特,对中间三条语句执行控制操作,即实现受控Hadamard操作,受控CNOT操作,受控RX操作

DAGGER & ENDDAGGER

解释:DAGGER控制语句,起始标识是DAGGER,终止标识是 ENDDAGGER,无输入参数,功能是对DAGGER与ENDDAGGER之间的语句代表的总的操作矩阵M进行转置共轭得到M^†,然后将M^†作用在态空间上,具体实现细节为将DAGGER与ENDDAGGER之间的语句顺序颠倒,然后每个操作变为其转置共轭操作。DAGGER & ENDDAGGER语句也可以嵌套,对应方式CONTROL&ENDCONTROL一致。 例子:

DAGGER
H 1
H 4
DAGGER
%DAGGER语句嵌套
RY 2,” 1.57079633”
TOFFOLI 3,4,2
ENDDAGGER
CNOT 2,3
ENDDAGGER
%具体实现为先对里层DAGGER语句中的操作执行转置共轭操作,将里层DAGGER语句去掉,然后对外层DAGGER语句执行转置共轭操作。

RESET

解释:重置操作,输入参数为目标量子比特序号,功能为将目标量子比特强行置为|0⟩态,然后对整个态空间进行归一化。 例子:

RESET 2
%将2号量子比特置为|0>态。

测量操作

###MEASURE 解释:测量操作,输入参数为目标量子比特序号和保存测量结果的经典寄存器序号,功能是对目标量子比特进行测量并将测量结果保存在对应的经典寄存器里面,测量后再将整个态归一化。 例子:

MEASURE 3,$0
%对3号量子比特进行测量操作,将测量结果保存到0号经典寄存器中。

PMEASURE

解释:联合测量操作,输入参数为一连串要测量的量子比特序号,功能是计算出输入的目标比特构成的子空间所有态的概率。这个操作只是算出概率,并没有改变量子态。PMEASURE语句仅能放置在程序的最后一行,它只是一个量子仿真的功能,并不实际改变量子态。 例子:

PMEASURE 2,3,6,7
%计算2,3,6,7号量子比特构成的16个态的概率,即2,3,6,7号量子比特处于态|0000>,|0001>……|1111>的概率。