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
由%开始,到该行的结尾,是程序的行注释,注释的语句会被完全忽略。
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个经典寄存器的位置。
解释:量子态的初始化操作,输入参数为量子比特数目,功能是将所有量子比特置为|0⟩态,必须放在第一行 例子:
QINIT 5
%定义5个量子比特,初态置为|00000>
解释:定义保存测量结果的经典寄存器的个数,输入参数为要定义的经典寄存器的个数。经典寄存器的数目一般与最后测量的量子比特数目一致。 例子:
CREG 2
%定义两个经典寄存器
解释:单比特Hadamard门,输入参数为目标量子比特序号,功能是对目标量子比特执行Hadamard操作。 例子:
H 4
%对编号为4的量子比特执行Hadamard操作
解释:单比特RX/RY/RZ门,输入参数为目标量子比特序号n和弧度制表示的角度θ,功能是对n号量子比特执行RX/RY/RZ操作。 例子:
RY 3,”pi”
%对3号量子比特绕其Bloch球的Y轴旋转π
解释:单比特X1/Y1/Z1门,输入参数为目标量子比特序号n,功能是对n号量子比特执行X1/Y1/Z1操作。 例子:
X1 3
%3号量子比特执行X1操作
解释:单比特NOT门,即量子非门,输入参数为目标量子比特序号,功能是目标量子比特执行NOT操作。 例子:
NOT 1
%1号量子比特执行NOT操作
解释:单比特Y门,输入参数为目标量子比特序号,功能是目标量子比特执行Y操作。 例子:
Y 1
%1号量子比特执行Y操作
解释:单比特Z门,输入参数为目标量子比特序号,功能是目标量子比特执行Z操作。 例子:
Z 1
%1号量子比特执行Z操作
解释:单比特T门,输入参数为目标量子比特序号,功能是目标量子比特执行T操作。 例子:
T 1
%1号量子比特执行T操作
解释:单比特S门,输入参数为目标量子比特序号,功能是目标量子比特执行S操作。 例子:
S 1
%1号量子比特执行S操作
解释:单比特U1门,输入参数为目标量子比特序号,功能是目标量子比特执行U1操作。 例子:
U1 1
%1号量子比特执行U1操作
解释:两比特CNOT门,输入参数为控制量子比特序号,目标量子比特序号,功能是对这两个量子比特执行CNOT操作。 例子:
CNOT 3,2
%3号量子比特为控制量子比特,2号量子比特为目标量子比特,对其执行CNOT操作。
解释:两比特ISWAP门,输入参数为两个量子比特的序号,功能是执行ISWAP操作 例子:
ISWAP 2,3
%对2号量子比特和3号量子比特执行ISWAP操作
解释:两比特SQISWAP门,输入参数为两个量子比特的序号,功能是执行SQISWAP操作 例子:
SQISWAP 2,3
%对2号量子比特和3号量子比特执行SQISWAP操作
解释:两比特CZ门,输入参数为两个量子比特的序号,功能是执行CZ操作 例子:
CZ 2,3
%对2号量子比特和3号量子比特执行CZ操作
解释:两比特CR门,输入参数为两个量子比特的序号和旋转角度,功能是执行CR操作 例子:
CR 2,3,"pi"
%对2号量子比特和3号量子比特执行CR操作
解释:三比特TOFFOLI门,输入参数为两个控制量子比特和一个目标量子比特的序号,功能是执行TOFFOLI门操作 例子:
TOFFOLI 1,2,3
%1号和2号量子比特为控制量子比特,3号量子比特为目标量子比特,对这三个量子比特执行TOFFOLI门操作
解释:DAGGER控制语句,起始标识是DAGGER,终止标识是 ENDDAGGER,无输入参数,功能是对DAGGER与ENDDAGGER之间的语句代表的总的操作矩阵M进行转置共轭,具体实现细节为将DAGGER与ENDDAGGER之间的语句顺序颠倒,然后每个操作变为其转置共轭操作。DAGGER & ENDDAGGER语句也可以嵌套。 例子:
DAGGER
H 1
H 4
DAGGER
%DAGGER语句嵌套
RY 2,” 1.57079633”
TOFFOLI 3,4,2
ENDDAGGER
CNOT 2,3
ENDDAGGER
%具体实现为先对里层DAGGER语句中的操作执行转置共轭操作,将里层DAGGER语句去掉,然后对外层DAGGER语句执行转置共轭操作。
解释:测量操作,输入参数为目标量子比特序号和保存测量结果的经典寄存器序号,功能是对目标量子比特进行测量并将测量结果保存在对应的经典寄存器里面,测量后再将整个态归一化。 例子:
MEASURE 3,$0
%对3号量子比特进行测量操作,将测量结果保存到0号经典寄存器中。
解释:概率测量操作,输入参数为一连串要测量的量子比特序号,功能是计算出输入的目标比特构成的子空间所有态的概率。这个操作只是算出概率,并没有改变量子态。PMEASURE语句仅能放置在程序的最后一行,它只是一个量子仿真的功能,并不实际改变量子态。 例子:
PMEASURE 2,3,6,7
%计算2,3,6,7号量子比特构成的16个态的概率,即2,3,6,7号量子比特处于态|0000>,|0001>……|1111>的概率。