Quil

简介

Quil可以从一个很低级的层次直接描述量子程序、量子算法,它的地位类似于经典计算机中的硬件描述语言或者汇编语言。Quil基本采用“指令+参数列表”的设计方法。一个简单的量子程序例子如下:
X 0
Y 1
CNOT 0 1
H 0
RX(-3.141593) 0
MEASURE 1 [0]
  • X 的作用是对目标量子比特进行 Pauli-X 门操作。与之类似的关键词有 YZH 等等。

  • Y 的作用是对目标量子比特进行 Pauli-Y 门操作。

  • CNOT 的作用是对两个量子比特执行 CNOT 操作。输入参数为控制量子比特序号和目标量子比特序号。

  • H 的作用是对目标量子比特进行 Hadamard 门操作。

  • MEASURE 的作用对目标量子比特进行测量并将测量结果保存在对应的经典寄存器里面,输入参数为目标量子比特序号和保存测量结果的经典寄存器序号。

上述仅为Quil指令集语法的一小部分, 详细介绍请参考 pyQuil

接口介绍

convert_qprog_to_quil(qprog: QProg, machine: QuantumMachine) str

将 QProg 转换为 Quil 指令字符串

该函数用于将QProg转化为 Quil(Quantum Instruction Language)指令字符串。Quil 是一种量子程序语言,用于描述量子线路的操作和演化。

param qprog:

要转换的 Quantum Program(QProg)。

type qprog:

QProg

param machine:

量子计算机实例,用于提供上下文环境。

type machine:

QuantumMachine

return:

Quil 指令字符串。

rtype:

str

示例用法:

quil_code = convert_qprog_to_quil(qprog, machine)  # 将 QProg 转化为 Quil 指令字符串

我们先用pyqpanda构建一个量子程序:

prog = QProg()
prog << X(qubits[0]) << Y(qubits[1])\
    << H(qubits[2]) << RX(qubits[3], 3.14)\
    << Measure(qubits[0], cbits[0])

然后调用 convert_qprog_to_quil 接口实现转化

quil = convert_qprog_to_quil(prog, qvm)

实例

from pyqpanda import *

if __name__ == "__main__":
    qvm = CPUQVM()
    qvm.init_qvm()
    qubits = qvm.qAlloc_many(4)
    cbits = qvm.cAlloc_many(4)
    prog = QProg()

    # 构建量子程序
    prog << X(qubits[0]) << Y(qubits[1])\
        << H(qubits[2]) << RX(qubits[3], 3.14)\
        << Measure(qubits[0], cbits[0])

    # 量子程序转换Quil, 并打印Quil
    quil = convert_qprog_to_quil(prog, qvm)
    print(quil)

运行结果:

DECLARE ro BIT[1]
X 0
Y 1
H 2
RX(3.140000) 3
MEASURE 0 ro[0]