2.isQ-core编程语言用户手册.pdf
isQ 编程语言用户手册 概述 isQ 是由中国科学院软件研究所与中科弧光量子软件公司共同开发的量子程序设计语言,目 前开发团队正在研发 isQ 2.0 版本。相应地,开发团队实现了多个版本的编译器以将 isQ 对 接到不同的硬件平台或模拟器上。本用户手册将详细介绍中科院量子云平台上所支持的 isQ 编程语言的使用方法——为了适配超导量子硬件的一些底层限制,我们对完整版 isQ 语言的 语法特性做了一些简化,以使得用本手册中的 isQ 语言所编写的量子程序,能真正地运行在 支持 QCIS 指令集的硬件平台上。接下来,我们将用 isQ-core 来表示云平台上所支持的 isQ 版本,以区别于完整的 isQ 语言。后续随着 QCIS 指令集和云平台的扩展,isQ-core 的语法 也会进行迭代与更新。 下面,我们将首先给出量子云平台 isQ-core 的语法说明,然后再列举若干例子以便读者有 更直观的理解。 量子云平台 isQ-core 语法说明 isQ-core 编程语言包含如下四种操作:自定义 qubit 变量,酉操作,测量操作,for 循 环。完整的代码结构如下: 𝑄𝑢𝑏𝑖𝑡 𝐷𝑒𝑓𝑖𝑛𝑒 … 𝑝𝑟𝑜𝑐𝑒𝑑𝑢𝑟𝑒 𝑚𝑎𝑖𝑛(){𝑝𝑟𝑜𝑐𝑒𝑑𝑢𝑟𝑒𝐵𝑜𝑑𝑦} 其中 procedureBody 由酉操作,测量操作以及 for 循环构成 自定义 qbit isQ-core 支持用户定义 qubit 变量(仅支持定义全局变量) ,可为单个变量,或者 qubit 数组(注意在 isQ 中, qubit 对应的关键字是 “qbit” ),定义格式如下: 𝑞𝑏𝑖𝑡 𝐼𝐷; 𝑞𝑏𝑖𝑡 𝐼𝐷[𝑁𝑈𝑀𝐵𝐸𝑅]; 𝑞𝑏𝑖𝑡 𝐼𝐷1 , … , 𝐼𝐷𝑛 [𝑁𝑈𝑀𝐵𝐸𝑅]; 其中 ID 为变量名,由字母和数字构成,如 a, b2,变量名不能重复;数组变量形式 为 ID[NUMBER],NUMBER 为数字,如 a[3], b1[10];每一行可定义单个或多个 变量/数组。所有的 qubit 变量均默认初始化为|0> qbundle 在说明 procedureBody 之前,我们先介绍一个概念:qbundle。qbundle 表示 qubit 数组内的一组 qubit,其表达形式如下: 𝐼𝐷 [𝑖𝑑𝑥1 , 𝑖𝑑𝑥2 , … , 𝑖𝑑𝑥𝑛 ] 𝐼𝐷[𝑠𝑡𝑎𝑟𝑡: 𝑠𝑡𝑜𝑝: 𝑠𝑡𝑒𝑝] Qbundle 有两种表达形式, 其中 ID 为 qubit 变量名, 必须为之前定义的数组变量。 在第一种表达形式中,用一系列下标来表示这一组 qubit,如我们之前定义了 t[10], 则可以用 t[1,3,5,7]来表示 t[1],t[3],t[5],t[7]这四个 qubit。第二种表达形式类似 python 的 range,用 start/stop 表示起始/终止下标(不包含 stop) ,step 表示 步长,默认为 1。如 t[1:4]表示 t[1],t[2],t[3]这三个 qubit,t[1:6:2]表示 t[1],t[3],t[5] 这三个 qubit 酉操作 酉操作为对 qubit 作用酉门,定义格式如下: 𝐺𝑎𝑡𝑒𝐼𝐷 < 𝑞𝑖𝑑1 , … , 𝑞𝑖𝑑𝑛 >𝐺𝑎𝑡𝑒𝐼𝐷< 𝑞𝑏𝑢𝑛𝑑𝑙𝑒1 , … , 𝑞𝑏𝑢𝑛𝑑𝑙𝑒𝑛 > GateID 为酉门名称,现有基础门包括:H,X,Y,Z,S,T,SD,TD,X2P,X2M, Y2P,Y2M, CZ,n 为门作用的 qubit 数目(CZ 为 2,其余门均为 1) 。酉门可作 用在 qubit 变量上(形式一)或者 qbundle(形式二)上。当作用在 qbundle 上 时,𝑞𝑏𝑜𝑢𝑛𝑑𝑖 的长度必须一致,此时其语义为对每个 j,执行 𝐺𝑎𝑡𝑒𝐼𝐷 < 𝑞𝑏𝑢𝑛𝑑𝑙𝑒1,𝑗 , … , 𝑞𝑏𝑢𝑛𝑑𝑙𝑒𝑛,𝑗 > 如 H ; CZ; CZ