''是用于量子计算的功能编程语言。Proto-Quipper是一种旨在为震颤提供正式基础的语言家族。在本文中,我们用一种称为动态提升的构造扩展了原始Quipper-M,该构造中存在于震颤中。凭借作为电路描述语言,原始电波器有两个单独的运行时间:电路生成时间和电路执行时间。在电路生成时间已知的值称为参数,在电路执行时间已知的值称为状态。动态提升是一个使状态(例如测量结果)提升到参数的操作,它可以在其中影响电路的下一个部分的生成。因此,动态提升使原始程序可以交流经典和量子计算。我们描述了我们称为原始Quipper-dyn语言的语法。其类型系统使用模式系统来跟踪动态提升的使用。我们还提供了一种基于丰富类别理论的动态提升的操作语义以及一种抽象的分类语义。我们证明类型系统和操作语义相对于我们的分类语义都是合理的。最后,我们提供了一些原始Quipper-Dyn程序的示例,这些程序可以利用动态提升。
量子计算机原则上可以在基于现代计算基础架构的某些关键任务上优于常规计算机。实验量子计算处于早期阶段,现有设备尚不适合实用计算。然而,在学术界和工业中,几个研究人员现在都在构建量子计算机(例如,参见[2,12,17])。量子计算还为编程语言社区提出了许多具有挑战性的问题[18]:我们应该如何设计用于量子计算的编程语言?我们应该如何编译和优化量子程序?我们应该如何测试和验证量子程序?我们应该如何理解量子编程语言的语义?在本文中,我们专注于使用依赖线性的功能语言原始Quipper-D进行量子电路编程。量子力学的无键属性指出,通常不能复制量子的状态。许多现有的量子编程语言,例如Quipper [10,11],Qiskit [22],Q#[28],CIRQ [5]或ProjectQ
实现自动化非计算的第一步是能够合成伴随函数。给定一个代码单元 𝑓 ,伴随单元 𝑓 † 反向执行计算。它是通过反复应用线性代数恒等式 ( 𝑓 ; 𝑔 ) † = 𝑔 †; 𝑓 † 获得的。图 1 显示了一个示例。在那里我们还看到了模式 𝑔 ; 𝑓 ; 𝑔 †,称为共轭,其中 𝑔 计算一些变量,𝑓 使用它们,最后 𝑔 † 取消对它们的计算。量子编程框架通常支持自动共轭:程序员指定 𝑔 和 𝑓 ,框架自动合成伴随 𝑔 † 并在正确的位置调用它。 Qiskit [ Aleksandrowicz et al . 2019 ]、Quipper [ Green et al . 2013 ]、Qwire [ Paykin et al . 2017 ]、Q# [ Microsoft 2020 ]、Tower [ Yuan and Carbin 2022 ] 和 Qunity [ Voichick et al . 2023 ] 均支持伴随合成和自动共轭。然而,这还不够,主要有两个原因:
现有的量子语言迫使程序员在较低的抽象层次上工作,从而导致代码不直观且混乱。一个根本原因是,从程序状态中删除临时值需要明确应用量子操作来安全地取消计算这些值。我们提出了 Silq,这是第一种通过支持安全、自动取消计算来解决这一挑战的量子语言。这可以实现一种直观的语义,即隐式地删除临时值,就像在经典计算中一样。为了确保 Silq 语义的物理性,其类型系统利用新颖的注释来拒绝非物理程序。我们的实验评估表明,Silq 程序不仅更易于读写,而且比其他量子语言中的等效程序短得多(Q# 平均减少 46%,Quipper 减少 38%),同时仅使用一半的量子原语。
原则上,量子计算机可以在现代计算基础设施所依赖的某些关键任务上胜过传统计算机。实验性量子计算尚处于早期阶段,现有设备尚不适合实际计算。不过,学术界和工业界的一些研究人员正在构建量子计算机(例如,参见 [2,12,17])。量子计算也给编程语言社区提出了许多具有挑战性的问题 [18]:应如何设计用于量子计算的编程语言?应如何编译和优化量子程序?应如何测试和验证量子程序?应如何理解量子编程语言的语义?在本文中,我们重点研究使用线性依赖类型函数式语言 Proto-Quipper-D 进行量子电路编程。量子力学的不可克隆特性表明,通常无法复制量子比特的状态。许多现有的量子编程语言,如 Quipper[10,11]、QISKit [22]、Q# [27]、Cirq [5] 或 ProjectQ [26],都没有强制执行此属性。因此,程序员必须确保程序中对量子位的引用不会重复或丢弃。线性类型已用于资源感知编程 [8,28],现在众所周知
原则上,量子计算机可以在现代计算基础设施所依赖的某些关键任务上胜过传统计算机。实验性量子计算尚处于早期阶段,现有设备尚不适合实际计算。不过,学术界和工业界的一些研究人员正在构建量子计算机(例如,参见 [2,11,16])。量子计算也向编程语言社区提出了许多具有挑战性的问题 [17]:应如何设计用于量子计算的编程语言?应如何编译和优化量子程序?应如何测试和验证量子程序?应如何理解量子编程语言的语义?在本文中,我们重点研究使用线性依赖类型函数式语言 Proto-Quipper-D 进行量子电路编程。量子力学的不可克隆特性表明,通常无法复制量子比特的状态。许多现有的量子编程语言,如 Quipper[9,10]、QISKit [21]、Q# [26]、Cirq [5] 或 ProjectQ [25],都没有强制执行此属性。因此,程序员必须确保程序中对量子位的引用不会重复或丢弃。线性类型已用于资源感知编程 [7,27],现在众所周知
现代函数式编程语言理论使用单子来编码计算副作用和副上下文,超越了基本的程序逻辑。尽管量子计算本质上具有副作用(如量子测量)和上下文依赖性(如混合辅助状态),但这种单子范式很少应用于量子编程语言。在这里,我们系统地分析了由格罗滕迪克的“操作动机瑜伽”诱导的参数化模块谱类别上的(共)单子——目前专门针对 HC 模块,并进一步针对集合索引复向量空间,如配套文章 [EoS] 中所述。将索引向量空间解释为由量子测量结果参数化的备选量子态空间集合,如 Proto-Quipper 语义中所述,我们发现这些(共)单子为函数式量子编程提供了一种全面的自然语言,具有经典控制和将量子测量结果“动态提升”回经典上下文的功能。最后,我们指出了一种领域特定的量子编程语言 ( QS ),它以透明的 do 符号表示这些一元量子效应,可嵌入到最近构建的线性同伦类型理论 ( LHoTT ) 中,后者可解释为参数化的模块谱。一旦嵌入 LHoTT ,它应该可以实现形式可验证的通用量子编程,具有线性量子类型、经典控制、动态提升,尤其是拓扑效应(如配套文章 [TQP] 中所述)。
量子算法通常在经典数据的量子叠加上应用经典操作,例如算术或谓语检查;这些所谓的甲壳通常是量子程序中最大的组成部分。为了简化高效,正确的Oracle功能的构建,本文介绍了VQO,这是COQ证明助手实施的高保证框架。VQO的核心是O QASM,Oracle量子组装语言。o Qasm操作通过量子傅立叶变换在两个不同的基础之间移动量子位,因此承认了重要的优化,但没有引起纠缠和随附的指数爆炸。o QASM的设计使我们能够证明VQO的编译器从一种名为O QIMP到O QASM的简单命令性语言,从O Qasm到SQIR,从O QASM到SQIR,一种通用量子量组装语言 - 允许我们通过基于QuickChick property属性属性的测试框架有效地测试O Qasm程序的质量质量。我们已经使用VQO实施了各种算术和几何操作员,这些算术和几何操作员是重要的Oracles的构建块,包括Shor's和Grover的算法中使用的Oracles。我们发现,与使用lclassicalžGates构建的量子相比,VQO的基于QFT的算术甲壳所需的量子量要少,有时甚至少得多。但是,VQO的后者版本与Quipper生产的Oracles(在Qubit和Gate计数方面)相当或更好,这是一个最先进但未验证的量子编程平台。
现代函数式编程语言理论使用单子来编码计算副作用和副作用上下文,超越了基本的程序逻辑。尽管量子计算本质上是有副作用的(如在量子测量中)和依赖于上下文的(如在混合辅助状态中),但这种单子范式很少被应用于量子编程语言。在这里,我们系统地分析了由格罗滕迪克的“操作动机瑜伽”诱导的参数化模块谱类别上的(共)单子——目前专门针对 HC 模块,并进一步针对集合索引复向量空间,如配套文章 [SS23-EoS] 中所述。将索引向量空间解释为由量子测量结果参数化的备选量子态空间的集合,如 Proto-Quipper - 语义中熟悉的那样,我们发现这些(共)单子为函数式量子编程提供了一种全面的自然语言,具有经典控制和将量子测量结果“动态提升”回经典上下文的功能。最后,我们指出了一种领域特定的量子编程语言 (QS),它以透明的 do 符号表示这些单子量子效应,可嵌入到最近构建的线性同伦类型理论 (LHoTT) 中,后者可解释为参数化的模块谱。一旦嵌入到 LHoTT 中,它应该可以实现形式可验证的通用量子编程,具有线性量子类型、经典控制、动态提升,尤其是拓扑效应(如配套文章 [TQP] 中所述)。
现代函数式编程语言理论使用单子来编码计算副作用和副作用上下文,超越了基本的程序逻辑。尽管量子计算本质上是有副作用的(如在量子测量中)和依赖于上下文的(如在混合辅助状态中),但这种单子范式很少被用于量子编程语言。在这里,我们系统地分析了由格罗滕迪克的“操作动机瑜伽”诱导的参数化模块谱类别上的(共)单子——目前专门用于 HC 模块,并进一步用于集合索引复向量空间,如配套文章 [EoS] 中所述。将索引向量空间解释为由量子测量结果参数化的备选量子态空间的集合,如 Proto-Quipper - 语义中熟悉的那样,我们发现这些(共)单子为函数式量子编程提供了一种全面的自然语言,具有经典控制和将量子测量结果“动态提升”回经典上下文的功能。最后,我们指出了一种领域特定的量子编程语言 (QS),它以透明的 do 符号表示这些单子量子效应,可嵌入到最近构建的线性同伦类型理论 (LHoTT) 中,后者可解释为参数化的模块谱。一旦嵌入到 LHoTT 中,它应该可以实现形式可验证的通用量子编程,具有线性量子类型、经典控制、动态提升,尤其是拓扑效应(如配套文章 [TQP] 中所述)。