Verifying Fault-Tolerance of Quantum Error Correction Codes
University of Pennsylvania(宾夕法尼亚大学);University of Edinburgh(爱丁堡大学);Intel Corporation(英特尔公司)
本文提出了一种基于量子符号执行的自动工具,用于验证量子纠错码的容错性,并在多种纠错码上展示了其有效性。
2025-06-07 cs.PL quant-ph
Synthesizing Symmetric Lenses
镜头是可以“前到后”和“后到前”运行的程序,允许在两个方向上传输对源数据或目标数据的更新。透镜已被广泛研究、推广和应用。最近的工作已经证明了如何从类型导向的程序合成技术可以用来有效地合成一个简单的类的镜头-双射镜头字符串数据-给定一对类型(正则表达式)和例子。我们将这种合成算法扩展到更广泛的一类透镜,称为简单对称透镜,包括所有双射透镜,所有流行的“不对称”透镜类别,以及霍夫曼等人提出的“对称透镜”的一个子集。直观地说,简单对称透镜允许一些信息存在于一侧,但不是另一侧,反之亦然。它们具有独立的理论兴趣,是不使用持久内部状态的最大类对称透镜。合成简单的对称透镜比合成双射透镜更具挑战性:由于每一侧的一些信息可以与另一侧“断开”,因此通常会有许多透镜与给定的示例一致。为了指导搜索过程,我们使用随机正则表达式和信息论来估计候选镜头传播的信息量,优选传播更多信息的镜头,以及将源和目标格式的部分标记为不相关或必要的用户注释。我们描述了一个简单的对称透镜和我们的合成过程的扩展回飞棒语言的实现。我们评估其性能的48个基准测试的例子,从Flash填充,Augeas,和双向编程文献。我们的实现可以在30秒内合成每个镜头。
2019-06-25 cs.PL
Verifying a Realistic Mutable Hash Table
本研究使用Stainless程序验证器验证Scala标准库中的可变LongMap哈希表,引入新的引用交换结构以支持数组扩容验证,发现并修复了原实现的漏洞,且验证后版本性能在原版本的1.5倍以内。
2024-01-30 cs.PL cs.SE
Verifying an Effect-Handler-Based Define-By-Run Reverse-Mode AD Library
本文研究基于效应处理程序的按定义运行反向模式自动微分库的验证,通过分离逻辑提供机器检查的正确性证明。
2023-10-20 cs.LO cs.PL
Row-Polymorphic Types for Strategic Rewriting
我们提出了一个类型系统的战略语言,表达程序转换重写规则的组合物。我们的行多态类型系统有助于编译器工程师编写正确的策略,静态拒绝重写,否则将在重写过程中失败的无意义的组合物在运行时。此外,我们的类型系统能够推理重写如何改变计算程序的形状。我们提出了一个形式化的语言在其类型系统,并展示了它的实际用途表示编译器优化策略。我们的类型系统为许多有趣的未来应用程序奠定了基础,包括验证程序转换的正确性和从编码为类型的规范合成程序转换。
2021-03-23 cs.PL
Verifying Liveness Properties of ML Programs
高阶递归模式是布尔程序的高阶模拟;它们形成了函数程序的自然抽象类。我们提出了一个新的,有效的算法来检查由高阶递归方案生成的树的CTL性质,这是Kobayashi的基于交集类型的模型检验技术的扩展。我们表明,该算法的实现,THORS,执行良好的一些小的例子,我们演示了它如何可以用来验证OCaml程序的活性属性。示例属性包括诸如“所有打开的套接字最终都将关闭”和“锁将保持到文件关闭”之类的语句。
2020-12-24 cs.PL
A Light-Weight Approach for Verifying Multi-Threaded Programs with CPAchecker
由于增加每个CPU插槽的处理单元数量的强烈趋势,因此多线程程序变得越来越重要。我们介绍了一种新的可配置的程序分析验证多线程程序的线程数有限。我们提出了一个简单而有效的实现现有的程序验证框架CPAchecker的组成部分。虽然CPAchecker已经在一个大型的基准集的顺序验证任务的竞争力,我们的扩展增强了框架的整体适用性。我们处理多线程的实现与数据流分析的抽象域是正交的,因此,可以与CPAcchecker中的几种现有分析相结合,如值分析,区间分析和BDD分析。新的分析是模块化的,可以用来,例如,验证可达性属性以及检测程序中的死锁。本文包括一些优化步骤的效益评估(例如,改变可达性算法的迭代顺序或应用偏序约简)以及与用于验证多线程程序的其它现有技术工具的比较。
2016-12-15 cs.LO cs.PL cs.SE
A HAT Trick: Automatically Verifying Representation Invariants Using Symbolic Finite Automata
本文提出使用符号有限自动机(SFA)结合精化类型系统,实现 Hoare Automata Types (HATs) 以自动验证依赖有状态库的数据结构表示不变式,并开发了双向类型检查算法将其转化为 SMT 可验证形式。
2024-09-26 cs.PL
Verifying the DPLL Algorithm in Dafny
现代高性能SAT求解器可以快速解决实践中出现的大型可满足性实例。如果实例是可满足的,那么SAT求解器可以提供一个见证,该见证可以以令人满意的真值赋值的形式独立地进行检查。但是,如果实例无法满足,则证书可能会呈指数级增长,或者SAT求解器可能无法输出证书。然后,SAT求解器的实现应该被信任不包含错误。然而,由典型的高性能SAT求解器实现的数据结构和算法足够复杂以允许细微的编程错误。为了解决这个问题,我们使用Dafny系统构建了一个经过验证的SAT求解器。我们在本文中讨论它的实现。
2019-09-04 cs.LO cs.PL cs.SC
Verifying C11-Style Weak Memory Libraries
演绎验证的并发程序在弱内存下,到目前为止,仅限于简单的程序在一个单一的状态空间。对于可伸缩性,我们还需要具有可验证库抽象的模块化技术。本文解决了这一挑战的背景下,RC 11 RAR,C11内存模型的一个子集,允许放松和释放获取访问,但不允许,所谓的负载缓冲周期。我们开发了一个简单的框架,用于指定抽象对象,精确地描述了抽象方法调用的可观察性保证。我们展示了如何将这个框架与一个操作语义集成,该操作语义使客户端程序执行它使用的库中的抽象方法调用的验证成为可能。最后,我们将展示如何实现这样的抽象在RC 11 RAR可以验证通过开发一个(上下文)细化框架的抽象对象。我们的框架,包括操作语义,客户端库程序的验证技术,和抽象库和它们的实现之间的模拟,已在伊莎贝尔/HOL机械化。
2020-12-28 cs.LO cs.PL
Multiparty Session Programming with Global Protocol Combinators
多方会话类型(MPST)是通信协议的类型规则。它确保了良好类型的通信进程不会出现通信错误和死锁。MPST理论的最新实现依赖于(1)运行时线性检查以确保通信信道的正确使用,以及(2)用于指定和验证多方协议的外部域特定语言。为了克服这些限制,我们提出了一个用全局组合子编程的库--一组用于在OCaml中编写和验证多方协议的函数。一个协议中所有进程的局部行为都是从全局组合子中一次推断出来的。我们形式化的全球combinators和证明一个健全的可实现的全球combinators -一个良好类型的全球combinator派生出一组本地类型,类型端点程序可以确保类型和通信安全。我们的方法使全静态验证和整个协议的实现,从协议规范的过程实现,发生在同一种语言。我们将我们的实现与无类型和延续传递风格的实现进行比较,并通过实现大量的协议来展示其表现力。我们展示了我们的库可以与现有的库和服务进行互操作,实现DNS(域名服务)协议和OAuth(开放认证)协议。
2020-05-24 cs.PL
Verifying C11-Style Weak Memory Libraries via Refinement
演绎验证的并发程序在弱内存下,到目前为止,仅限于简单的程序在一个单一的状态空间。对于可伸缩性,我们还需要具有可验证库抽象的模块化技术。本文解决了这一挑战的背景下,RC 11 RAR,C11内存模型的一个子集,允许放松和释放获取访问,但不允许,所谓的,负载缓冲周期。我们开发了一个简单的框架,用于指定抽象对象,精确地描述了抽象方法调用的可观察性保证。我们展示了如何将这个框架与一个操作语义集成在一起,该操作语义可以验证客户端程序从他们使用的库中执行抽象方法调用。最后,我们将展示如何实现这样的抽象在RC 11 RAR可以验证通过开发一个(上下文)细化框架的抽象对象。我们的框架,包括操作语义,客户端库程序的验证技术,和抽象库和它们的实现之间的模拟,已在伊莎贝尔/HOL机械化。
2021-08-16 cs.LO cs.PL
Lean4Lean: Verifying a Typechecker for Lean, in Lean
本文提出了首个用 Lean 自身编写的 Lean 4 外部类型检查器,运行速度慢20%-50%,可验证整个 mathlib 库,并结合形式化验证证明了内核部分正确性,已发现并修复一个健全性漏洞。
2025-09-14 cs.PL
The complexity of verifying the release-acquire semantics over register machines
Uppsala University(乌普萨拉大学);Aalborg University(奥尔堡大学);LIGM, CNRS, Univ Gustave Eiffel(法国国家科学研究中心拉格朗日信息与计算机工程实验室,巴黎东克雷泰伊大学)
本文研究寄存器机实现是否符合释放-获取(RA)及其变体语义的验证问题,证明弱RA可在O(n^5)内验证,而RA和强RA是PSPACE完全的。
2026-06-11 cs.PL
Verifying Programs Under Custom Application-Specific Execution Models
研究人员最近设计了许多特定于应用的容错机制,这些机制使应用能够自然地对错误有弹性,或者包括附加的检测和校正步骤,这些步骤可以使应用的整体执行回到最终保证可接受的执行的包络中。然而,构建利用这些机制的应用程序的一个主要挑战是验证实现是否满足这些机制所需的基本不变量--给定一个在应用程序执行期间如何出现故障的模型。为此,我们提出了莱托,SMT为基础的自动验证系统,使开发人员能够验证他们的应用程序相对于一流的执行模型规范。也就是说,Leto使软件和平台开发人员能够以编程方式指定底层硬件系统的执行语义,并验证有关应用程序执行结果行为的断言。本文介绍了Leto程序设计语言及其相应的验证系统。我们还演示了几个应用程序,利用特定于应用程序的容错机制的Leto。
2018-05-16 cs.PL
Verifying Floating-Point Programs in Stainless
Uppsala University(乌普萨拉大学)
Stainless通过扩展验证器支持浮点数,实现了对Scala子集的自动验证,验证数学函数公理并验证实际实现的正确性。
2026-01-20 cs.LO cs.PL
Horn-ICE Learning for Synthesizing Invariants and Contracts
Indian Institute of Science(印度科学学院);Amazon India(亚马逊印度);University of Illinois, Urbana-Champaign(伊利诺伊大学厄巴纳-香槟分校);Max Planck Institute for Software Systems(马克斯·普朗克软件系统研究所)
我们设计了学习算法合成不变量使用霍恩蕴涵反例(霍恩ICE),扩展ICE学习模型。特别是,我们描述了一个决策树学习算法,学习霍恩ICE样本,工作在多项式时间,并使用统计算法来学习小树,满足样本。由于大多数验证证明可以使用Horn子句建模,Horn-ICE学习是一种更强大的技术,可以学习证明程序正确的归纳注释。我们的实验表明,我们的算法的实现是能够学习足够的归纳不变量和合同有效地为各种顺序和并发程序。
2017-12-26 cs.LG cs.LO cs.PL
A general formal memory framework in Coq for verifying the properties of programs based on higher-order logic theorem proving with increased automation, consistency, and reusability
近年来,许多轻量级程序已被部署在关键领域,例如基于区块链技术的智能合约。因此,这类程序的安全性和可靠性应该由最可信的技术来保证。高阶逻辑定理证明是验证程序性质的最可靠的技术之一。然而,程序可以由不同的高级程序设计语言开发,并且可以同时支持不同的形式化验证规范(特别是在代码级)的通用的、可扩展的和可重用的形式存储器(GERM)框架目前不可用于验证程序的属性。因此,目前的工作提出了一个GERM框架,以填补这一空白。该框架模拟物理内存硬件结构,包括一个低层形式化内存空间,并提供一套简单、非侵入的应用程序编程接口和辅助工具,使用Coq同时支持不同的形式化验证规范。建议的GERM框架是独立的和可定制的,并完全在Coq中验证。我们还提出了一个扩展的Curry-Howard同构,表示为执行-验证同构(EVI),它结合了符号执行和定理证明,以提高自动化程度的高阶逻辑定理证明辅助工具。我们还实现了一个玩具功能的程序设计语言在一个广义代数数据库风格和形式解释器在Coq的基础上GERM框架。这些实现,然后演示了EVI的应用程序到一个简单的代码段。
2018-03-27 cs.PL
Local Refinement Typing
我们介绍了融合算法的局部细化类型推断,产生一个新的SMT为基础的方法验证程序的多态数据类型和高阶函数。Fusion是简洁的,因为程序员只需要为(外部导出的)顶级函数和具有循环(递归)依赖关系的位置编写签名,之后Fusion可以可预测地合成所有中间项(可在可判定的细化逻辑中表达)的最精确的细化类型,从而检查程序而不会出现错误警报。我们已经实现了Fusion,并在LiquidHaskell套件的基准测试中对其进行了评估,总计约12 Kbps。Fusion检查现有的安全基准测试套件,使用的模板数量是以前的一半,速度快了近2倍。在一组新的定理证明基准测试中,Fusion的速度提高了10 - 50倍,并且通过合成最精确的类型,避免了误报,使验证成为可能。
2017-06-24 cs.PL
Modelling and Verifying an Object-Oriented Concurrency Model in GROOVE
SCOOP是一种编程模型和语言,允许在高抽象级别上进行并发编程。过去已经提出了几种验证SCOOP程序的方法,但是没有一种方法直接在源代码上操作而不进行修改或注释。我们提出了一个全自动的方法来验证(一个子集)SCOOP程序翻译为基于图形的模型。首先,我们提出了一个基于图变换的SCOOP语义。我们提出了一个实现的模型在国家的最先进的模型检查器GROOVE,它可以用来模拟程序和验证并发性和一致性属性,如死锁发生的不可能性或没有后置条件违反。其次,我们提出了一个翻译工具,SCOOP程序代码上运行,并生成输入的模型。我们通过案例研究的形式检查了一些程序来评估我们的方法。
2015-05-20 cs.LO cs.PL cs.SE
On Verifying Resource Contracts using Code Contracts
在本文中,我们提出了一种方法来检查使用现成的静态分析器的资源消耗合同。我们提出了一组注释,以支持资源使用规范,特别是,动态内存消耗约束。由于动态内存可以由内存管理器回收,因此该资源的消耗不是单调的。规约语言可以以模块化方式表达存储器消耗和生存期属性。我们通过扩展代码契约的规约语言开发了一个概念验证的实现。为了验证这些注释的正确性,我们依赖于代码契约静态验证器和指向分析。我们还简要讨论了我们的方法来处理非线性表达式的可能扩展。
2014-01-06 cs.PL cs.SE
Formalizing, Verifying and Applying ISA Security Guarantees as Universal Contracts
提出一种利用通用契约形式化指定并半自动验证ISA安全保证的通用方法,在平衡软硬件需求的同时支持对抗代码环境下的软件推理,并成功应用于MinimalCaps和带PMP的RISC-V及微内核验证。
2024-01-08 cs.CR cs.PL
DafnyMPI: A Dafny Library for Verifying Message-Passing Concurrent Programs
Tufts University(塔夫茨大学);American University of Central Asia(中亚美国大学)
DafnyMPI通过扩展Dafny语言的并发推理能力,为验证消息传递并发程序提供形式化验证方法,证明死锁自由、终止性和功能等效性。
2025-12-21 cs.PL
Verifying Termination and Error-Freedom of Logic Programs with block Declarations
我们提出了延迟声明的逻辑程序的验证方法。验证的性质是终止和自由的错误有关的内置。关于终止,我们提出了两种方法。第一种方法试图消除众所周知的推测性输出绑定问题。第二种方法是基于识别的谓词,使用这个谓词的原子的文本位置是无关的终止。这项工作有三个特点:它允许在几种模式下使用谓词;它表明块声明,这是一个非常简单的延迟结构,足以确保所需的属性;它考虑到选择规则,假设它是在大多数Prolog实现。这些方法可用于验证现有程序和帮助编写新程序。
2000-06-23 cs.LO cs.PL
Monitoring Blackbox Implementations of Multiparty Session Protocols
该研究提出分布式监控框架,支持黑盒组件的多方会话协议监控,合成监控器并证明其可靠性与透明性,扩展了可监控协议范围。
2023-10-03 cs.PL
Katara: Synthesizing CRDTs with Verified Lifting
无冗余复制数据类型(CRDTs)是设计可伸缩、无协调的分布式系统的一个很有前途的工具。然而,构建正确的CRDT是困难的,即使是经验丰富的开发人员也面临挑战。因此,CRDT的开发在很大程度上仍然是学术界的领域,新的设计通常需要等待同行评审和手动证明正确性。在本文中,我们提出了卡塔拉,一个程序合成为基础的系统,需要顺序数据类型的实现,并自动合成验证CRDT设计。这个过程的关键是CRDT正确性的一个新的正式定义,它将引用顺序类型与解决非交换操作之间冲突的轻量级排序约束相结合。我们的过程遵循验证提升工作的传统,包括使用合成归纳不变量和手工制作的CRDT状态和运行时语法将正确性编码到SMT逻辑中。Katara能够自动合成各种场景的CRDT,从再现经典CRDT到基于现有文献中的规范合成新颖设计。至关重要的是,我们的合成CRDT经过完全自动验证,消除了整个类别的常见错误,并将生产新CRDT的过程从艰苦的纸张正确性证明减少到轻量级规范。
2022-09-21 cs.DC cs.PL
Verifying Sequential Consistency under Bounded Preemptions
The Institute of Mathematical Sciences(数学科学研究所);Homi Bhabha National Institute(霍米·巴巴国立研究所);IIT Bombay(印度理工学院孟买分校);Chennai Mathematical Institute(金奈数学研究所)
本文研究在有限预emption下多线程程序序列一致性验证问题,发现单写程序可多项式时间解决,两写程序为NP难,三写程序在EXPTIME假设下有条件下限,且无界预emption下为W[1]-难。
2026-05-11 cs.PL
Synthesizing Optimal Parallelism Placement and Reduction Strategies on Hierarchical Systems for Deep Learning
University of Cambridge(剑桥大学);DeepMind
我们提出了一种新的表征的映射到分层加速器系统的多个并行形式(例如,数据和模型并行)是层次意识,大大减少了空间的软件到硬件的映射。我们通过实验验证了这些映射对全归约性能的实质性影响(高达448倍)。我们提供了一个新的语法指导的程序合成框架,能够分解减少一个或多个并行轴的集体序列的层次结构和映射感知的方式。对于69%的并行放置和用户请求的减少,我们的框架合成的程序在不同的GPU层次结构上进行评估时,性能优于默认的所有减少实现(最大2.04倍,平均1.27倍)。我们补充了我们的合成工具,模拟器超过90%的前10名的准确性,因此减少了对合成结果进行大量评估以确定一小部分最佳程序和映射的需要。
2021-11-16 cs.DC cs.LG cs.PL
Verifying Catamorphism-Based Contracts using Constrained Horn Clauses
我们解决的问题,验证程序的功能满足他们的合同,指定的前/后条件。我们遵循一种基于约束Horn子句(CHCs)的方法,通过该方法,验证问题被简化为检查来自给定程序和合同的一组子句的可满足性的问题。我们认为程序,操作代数数据类型(ADT)和一类合同指定的蜕变,即简单的递归模式定义的给定ADT的功能。我们通过几个例子表明,国家的最先进的CHC可满足性工具是不能有效地解决可满足性问题的合同直接翻译成CHCs。为了克服这个困难,我们提出了一种转换技术,删除ADT条款的CHCs和派生新的条款,工作在基本排序,如整数和布尔。因此,当使用衍生的CHC时,不需要关于ADT的归纳规则。我们证明了变换是合理的,也就是说,如果CHCs的导出集是可满足的,那么原来的集合也是可满足的。我们还证明了转换总是终止的合同指定的类的蜕变。最后,我们提出了我们的技术的实现时,验证许多非平凡的合同ADT操纵程序所获得的实验结果。
2022-09-07 cs.LO cs.PL
Can LLMs Reason About Program Semantics? A Comprehensive Evaluation of LLMs on Formal Specification Inference
School of Computing and Information Systems(计算与信息系统学院);The University of Melbourne(墨尔本大学)
本文引入综合基准 FormalBench 评估 LLM 对程序语义的推理能力,发现其在复杂结构(如循环)和语义保持变换上表现不佳,并设计自修复提示将成功率提升 25%。
2025-05-29 cs.AI cs.PL cs.SE
Parameterized Concurrent Multi-Party Session Types
会话类型已被提议作为静态验证通信协议的实现的手段。虽然以前的工作已经成功地验证了某些类的协议,它不能很好地处理参数化,多演员的情况下,固有的安全性。例如,滑动窗口协议在先前提出的会话类型系统中是不可表达的。本文介绍了System-A,一种新的类型化语言,它克服了许多以前的工作的表现力的限制。System-A显式地支持并行和并行,以及多种形式的参数化。我们定义了系统A,并展示了它如何可以用于一个大类的异步通信协议的静态验证。
2012-08-22 cs.DC cs.PL
Synthesizing Tight Privacy and Accuracy Bounds via Weighted Model Counting
本文提出利用二元决策图上的加权模型计数和对称性利用框架,在概率编程语言中合成差分隐私算法的紧致隐私与精度界,并通过随机响应等算法验证其有效性。
2024-10-01 cs.CR cs.PL
RHLE: Modular Deductive Verification of Relational $\forall\exists$ Properties
Hoare风格的程序逻辑是一种流行而有效的软件验证技术。关系程序逻辑是这种方法的一个实例,它能够推理两个或多个程序执行之间的关系。现有的关系程序逻辑集中于验证程序集合的所有运行不违反指定的关系行为。几个重要的关系属性,包括精细化和不干涉,不属于这一类别,因为它们也要求存在特定的理想执行。本文介绍了RHLE,用于验证这些类型的关系$\forall\exists$属性的逻辑。我们的方法的关键是一种新形式的函数规范,采用了一个变种的幽灵变量,以确保有效的实现表现出某些行为。我们已经使用了一个基于RHLE的程序验证器来验证一组不同的关系$\forall\exists$属性从文献中得出。
2022-09-08 cs.LO cs.PL