A Deductive Verification Framework For Higher Order Programs
在本报告中,我们介绍了为我们的APDC(Area Prática de Desenvolvimento Curriculum)课程研究项目开展的初步工作。这个项目的主要目标是开发一个框架,在Why3工具之上,用于验证有效的高阶程序。我们使用去功能化作为从高阶OCaml实现到一阶OCaml实现的中间转换。我们翻译的目标是WhyML,Why3的程序设计语言。我们相信去功能化可以是一个有趣的路线,高阶程序的自动验证,因为人们可以采用现成的自动程序验证器来证明所生成的一阶程序的正确性。这份报告还向读者介绍了演绎程序验证的主题,以及用于证明高阶有效程序的一些工具和概念。
2020-11-28 cs.LO cs.PL
VeGo: Direct Deductive Formal Verification of Go Programs for Computer Science Education
University of Saskatchewan(萨斯喀彻温大学)
该研究提出面向计算机科学教育的VeGo系统,可直接验证标准Go程序,整合多种形式化验证技术,对比其他语言论证Go的优势,经教育教材评估并规划了形式并发规约的路线图。
2026-08-25 cs.PL
A Deductive Verification Framework for Circuit-building Quantum Programs
虽然量子硬件的最新进展为某些关键领域的显着加速打开了大门,但量子算法仍然很难正确实现,并且验证此类量子程序是一项挑战。早期的尝试要么是缺乏自动化或参数化推理,要么是针对高级抽象算法描述语言,而这些语言与目前电路构建量子程序设计语言的事实共识相去甚远。因此,目前还没有以尺度不变的方式验证重要的量子算法实现。我们提出了Qbricks,第一个形式化验证环境的电路构建量子程序,具有明确的分离之间的代码和证明,参数规格和证明,高程度的证明自动化,并允许编码量子程序在一个自然的方式,即接近教科书的风格。Qbricks基于经典情况下形式化验证的最佳实践,并将其定制为量子情况:我们为量子程序带来了一种新的特定于域的电路构建语言,即Qbricks-DSL,以及一种新的逻辑规约语言Qbricks-Spec和一种专用的霍尔风格演绎验证规则,称为混合量子霍尔逻辑。特别是,我们介绍和密集建立在HOPS,最近的路径和符号表示,用于规范和自动化的高阶扩展。为了说明Qbricks的机会,我们实现了几个著名的和非平凡的量子算法的第一个验证参数实现,包括Shor整数分解的量子部分(Order Finding - Shor-OF),量子相位估计(QPE)-许多量子算法的基本构建块,以及Grover搜索。Qbricks中引入的规范和自动化演绎原则充分促进了这些突破。
2020-07-26 cs.PL
Caesar: A Deductive Verifier for Probabilistic Programs
RWTH Aachen University(亚琛工业大学);Cornell University(康奈尔大学);Saarland University(萨尔兰大学);University College London(伦敦大学学院);DTU Compute(丹麦技术大学计算系);University of Oldenburg(奥尔登堡大学)
Caesar通过HeyVL语言实现概率程序的验证,支持自定义证明规则和模型检查后端,具备五年研发成果与改进功能。
2026-05-15 cs.PL
Automated Deductive Verification for Ladder Programming
梯形图逻辑是IEC 61131-3标准化的程序设计语言,广泛用于对工业可编程逻辑控制器(PLC)进行编程。PLC程序由输入(其值在运行时由工厂传感器给出),输出(其值在运行时提供给工厂执行器)和从输入值计算输出值的逻辑表达式组成。由于梯形图程序的图形形式,以及典型工业程序中的输入和输出量,调试此类程序既耗时又容易出错。在本文中,我们提出了一个基于Why 3的工具原型,我们已经实现了自动化的演绎验证的使用,以提供一个易于使用和强大的调试工具的阶梯程序员。
2019-12-23 cs.LO cs.PL cs.SE
HaliVer: Deductive Verification and Scheduling Languages Join Forces
本文提出 HaliVer,将演绎验证器 Vercors 集成到 Halide 中,用同一规约验证算法及其调度生成的并行优化代码,显著减少标注并证明内存安全与功能正确性。
2024-01-19 cs.LO cs.PL
Sciduction: Combining Induction, Deduction, and Structure for Verification and Synthesis
University of California, Berkeley(加州大学伯克利分校)
即使在自动化的形式化方法令人印象深刻的进步,在系统验证和综合的某些问题仍然具有挑战性。例子包括验证软件的定量属性,包括对时间和能量消耗的约束,以及从规范中自动合成系统。主要的挑战包括环境建模、规范的不完整性以及底层决策问题的复杂性。本文提出了一种通过整合归纳推理、演绎推理和结构假设来应对这些挑战的方法。演绎推理,从一般规则或概念导出关于特定问题实例的结论,包括逻辑推理和约束求解等技术。归纳推理,从特定的实例中概括出一个概念,包括从例子中学习算法。结构假设用于定义工件的类别,例如在验证或合成过程中生成的不变量或程序片段。演绎使用结构假设来约束归纳和演绎推理,并积极地结合归纳和演绎推理:例如,演绎技术生成用于学习的示例,并且归纳推理用于指导演绎引擎。我们用三个应用来说明这种方法:(i)软件的时序分析;(ii)无循环程序的合成,以及(iii)混合系统的控制器合成。一些未来的应用进行了讨论。
2012-01-04 cs.AI cs.LO 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
Deductive Verification of Parallel Programs Using Why3
消息传递接口规范(MPI)定义了一个用于并行计算机编程的可移植消息传递API。MPI程序在正确性方面存在许多挑战:通信中的发送值和期望值可能不匹配,导致不正确的计算,可能导致崩溃;程序可能会死锁,导致资源浪费。现有的工具是不完全令人满意的:模型检查不规模与过程的数量,测试技术浪费资源,并高度依赖于测试集的质量。作为一种替代方案,我们提出了一个原型的基于类型的方法来编程和验证MPI像程序对协议。协议是用依赖类型语言编写的,旨在捕获MPI中最常见的原语,此外还包含一种原语递归和集体选择的形式。然后将协议翻译成Why 3,一种演绎软件验证工具。而源代码则是用Why 3平台的语言WhyML编写的,并根据协议进行检查。保证通过验证的程序是通信安全的,没有死锁。我们使用我们的方法验证了教科书中的几个并行程序,并报告了结果。
2015-08-20 cs.DC cs.PL
Foundations for Deductive Verification of Continuous Probabilistic Programs: From Lebesgue to Riemann and Back
本文为含循环、连续分布和条件化的概率程序验证奠定基础,通过黎曼和近似积分实现SMT不变量验证,并证明收敛性与完备性,且可在现有工具中应用。
2025-02-26 cs.LO cs.PL
Deductive Verification of Programs with Underspecified Semantics by Model Extraction
本文提出了一种新的、自动化程度高的语义欠规范程序的形式化验证方法,一种语言语义学,它不确定某些求值的顺序。首先,我们减少这个问题的非确定性的分布式系统,自动提取一个分布式的主动对象模型,欠指定的,顺序的C代码。这个翻译过程为所考虑的C子集提供了一个完全正式的语义。在所提取的模型中,每个非确定性选择对应于一个可能的评估顺序。此步骤还自动将ANSI/ISO C规约语言(ACSL)中的规范转换为活动对象的方法契约和对象不变量。然后,我们对指定的Active Objects模型执行验证。为此,我们已经实现了一个定理证明器Crowbar的基础上的行为程序逻辑(BPL),它验证了提取的模型相对于翻译的规范,并确保原始属性的C代码的所有可能的评估订单。通过使用模型提取,我们可以使用标准的工具,而不需要设计一个新的复杂的程序逻辑来处理欠规格说明。所使用的案例研究是高度低估,不能用现有的C语言工具进行验证。
2022-02-11 cs.LO cs.PL
Scalable Probabilistic Program Verification via Typed Extended Decision Diagrams
RWTH Aachen University(亚琛工业大学);Cornell University(康奈尔大学);Radboud University(拉德堡德大学)
针对概率程序验证中弱前置期望表示爆炸问题,提出类型化扩展决策图(TEDD)表示和SMT剪枝方法,将可扩展性提升数个数量级。
2026-06-24 cs.PL
Towards deductive verification of MPI programs against session types
消息传递接口(MPI)是开发并行应用程序的事实标准消息传递基础设施。在第一版库规范发布20年后,基于MPI的应用程序现在通常部署在超级计算机和集群计算机上。这些用C或Fortran编写的应用程序表现出复杂的消息传递行为,因此很难静态验证重要属性,例如不存在死锁。我们的工作建立在会话类型,一个理论描述协议,在这方面提供正确的建设保证。我们注释MPI原语和C代码与会话类型的合同,写在语言的软件验证C。然后用软件验证器检查带注释的代码的正确性。我们提出了初步的结果,并讨论了未来的挑战,验证现实的MPI程序符合会话类型。
2013-12-10 cs.DC cs.LO cs.PL
An Infinite Needle in a Finite Haystack: Finding Infinite Counter-Models in Deductive Verification
针对演绎验证中可满足含量词公式仅有无限模型、现有求解器只能找有限反例且易发散的问题,提出符号结构、符号模型搜索过程及涵盖多种类 EPR 的新可判定片段。
2024-09-10 cs.LO cs.PL
Teaching Design by Contract using Snap!
随着演绎程序验证研究的进展,新的工具和技术已成为可用于支持契约式设计推理的非平凡程序编写的广泛使用的程序设计语言。然而,演绎程序验证仍然是专家的活动,在编程,规范和验证方面有丰富的经验。我们想改变这种情况,通过开发程序验证技术,可用于更大的观众。在本文中,我们介绍了我们如何开发原型程序验证支持Snap!啪!是一种可视化的程序设计语言,特别针对高中生。我们以类似的视觉风格添加了规约语言构造,旨在使预期的语义从规范构造的外观和感觉中变得清晰。我们提供Snap的静态和动态验证支持!程序.特别注意错误消息,使其尽可能直观。
2021-07-12 cs.PL cs.SE
Error Localization, Certificates, and Hints for Probabilistic Program Verification via Slicing (Extended Version)
RWTH Aachen University(亚琛工业大学)
本文提出通过切片技术提升概率程序验证的诊断能力,通过Brutus实现高效错误定位与验证提示。
2025-12-24 cs.PL
Deductive Proof of Ethereum Smart Contracts Using Why3
bug或错误是任何软件或计算机程序都可能遇到的常见问题。这可能是由于程序编写不当、键入错误或存储管理不当造成的。然而,如果不安全的程序用于关键系统,错误可能成为一个重大问题。因此,这类系统的形式化方法是非常必要的。在本文中,我们使用一种形式语言,对基于智能合约的以太坊区块链应用程序进行演绎验证,智能合约是自动执行的数字合约。区块链系统操纵加密货币和交易信息。因此,如果区块链中发生错误,可能会发生严重的后果,例如金钱损失。因此,本文的目的是提出一种专门用于演绎验证的语言,称为Why 3,作为编写正式和验证智能合约的新语言,从而避免利用此类合约执行漏洞的攻击。我们首先编写Why 3智能合约程序;接下来我们制定规范以证明不存在运行时错误属性和函数属性,然后我们使用Why 3系统验证程序的行为。最后,我们将Why 3合约编译到以太坊虚拟机(EVM)。此外,我们给出了一组通用的数学语句,可以验证适合任何类型的持有加密货币的智能合约的功能属性,这表明Why 3可以成为编写智能合约的合适语言。为了说明我们的方法,我们描述了其应用到一个现实的工业用例。
2019-08-23 cs.LO cs.PL
Gobra: Modular Specification and Verification of Go Programs (extended version)
Go是一种越来越流行的系统程序设计语言,特别是针对并发和分布式系统。Go语言与其他命令式语言的不同之处在于,它通过goroutine提供了结构化的子类型和轻量级的并发性以及消息传递通信。这些特性的组合为静态验证提出了有趣的挑战,最突出的是可变堆和高级并发原语的组合。我们提出Gobra,一个模块化的,演绎的程序验证器,证明内存安全,崩溃安全,数据竞争自由,和用户提供的规范。Gobra基于分离逻辑,支持Go语言的一个大子集。它的实现将带注释的Go程序转换为Viper中间验证语言,并使用现有的基于SMT的验证后端来计算和履行证明义务。
2021-05-28 cs.PL
A Complete, Formal Semantics for Rust Source Code
Technical University of Darmstadt(达姆施塔特工业大学)
本文提出一种基于局部抽象、全局具体框架的模块化 Rust 形式化语义,支持异步特性与 Tokio,并证明调度器公平性及程序逻辑可靠性。
2026-10-06 cs.PL
Automating Unrealizability Logic: Hoare-Style Proof Synthesis for Infinite Sets of Programs
本文设计了首个 Unrealizability Logic (UL) 证明合成算法 Wuldo,通过解耦规则应用与非终结符摘要合成,实现了无限程序集合的可复用自动化验证,验证速度提升 1.96 倍。
2024-08-28 cs.PL
Experience Report on Formally Verifying Parts of OpenJDK's API with KeY
软件的演绎验证尚未进入行业,因为复杂性和可扩展性问题需要高度专业的专家。然而,长期的观点是开发验证工具,帮助工业软件开发人员更快,更容易地找到软件系统中的错误或瓶颈。KeY项目构成了一个用于指定和验证软件系统的框架,旨在使形式化验证工具适用于主流软件开发。为了帮助KeY的开发人员、用户和演绎验证社区,我们从用户的角度总结了使用KeY 2.6.1指定和验证真实世界Java代码的经验。为此,我们集中讨论OpenJDK 6的Collections-API的部分内容,其中存在非正式规范。当我们描述我们如何桥接非正式和正式规范时,我们也展示了我们遇到的伴随的挑战。我们的经验是,(a)原则上,演绎验证类API代码库是可行的,但需要很高的专业知识,(b)为现有的代码库开发正式的规范仍然是出了名的困难,(c)在Java中的某些语言结构的规格是具有挑战性的工具建设者。我们在指定OpenJDK 6的部分方面的初步努力构成了未来研究案例研究的垫脚石。
2018-11-27 cs.LO cs.PL cs.SE
Towards Automated Verification of LLM-Synthesized C Programs
本文提出 \synver{} 框架,通过对 LLM 生成的 C 程序施加语法与语义偏置,并基于 Verified Software Toolchain 构建验证工具,实现程序合成与自动化验证。
2025-10-20 cs.PL
Lightweight Interactive Proving inside an Automatic Program Verifier
在形式化方法中,演绎验证方法允许在关键软件上建立最强可能的形式化保证。缺点是设计适当的正式规范和成功履行所需的证明义务所需的人力成本。为了在工业软件开发环境中推广演绎验证,必须提供从简单和自动化方法逐步过渡到演绎验证的方法。SPARK环境,用于开发用Ada编写的关键软件,通过提供自动化工具来正式证明某些代码满足Ada合同中表达的要求,从而实现了这一目标。在利用自动证明器来履行证明义务的程序验证器中,需要一些额外的用户与证明任务的交互:或者帮助分析证明失败的原因,或者最终履行最先进的自动证明器无法达到的验证条件。在SPARK中添加交互式证明功能似乎很复杂,因为证明工具链使用了独立的中间验证工具Why 3,它足够通用,可以接受不同输入语言的多个前端。本文报告了我们的方法来扩展Why 3与交互式证明功能,并与一个通用的客户端-服务器基础设施,允许集成到一个外部的,前端的图形用户界面,如SPARK的证明交互。
2018-11-27 cs.LO cs.PL cs.SE
Automating Proofs of Data-Structure Properties in Imperative Programs
我们考虑动态操作数据结构的自动推理问题。最先进的方法仅限于展开和匹配(U+M)范式,其中谓词在被视为未解释之前通过从其定义中导出的(解)折叠操作进行转换。然而,验证具有迭代循环和多个函数调用的程序的证明义务通常不会屈服于这种范式。我们的贡献是一个证明方法-超越U+M -执行自动公式重写处理以前遇到的义务,在每个证明路径作为可能的归纳假设。这使我们第一次能够系统地推理出实际方案核查所产生的各种义务。我们展示了我们的证明规则的力量,常用的引理,从而关闭现有的国家的最先进的系统中剩余的差距。另一个影响,可能更重要的是,我们的方法重新获得了组合推理的能力,并表明使用用户提供的引理不再需要现有的基准集。这不仅消除了提出适当引理的负担,而且还显著地提高了验证过程,因为引理应用与展开相结合,通常会导致非常大的搜索空间。
2014-07-23 cs.PL
Automating and Mechanizing Cutoff-based Verification of Distributed Protocols
分布式协议通常是参数化的,并且可以在具有任意数量节点的系统上执行,因此证明其正确性成为无限状态验证问题。验证分布式协议最常用的方法是找到一个足够强的归纳不变量来证明所需的安全性。然而,发现归纳不变量是众所周知的困难,尤其是在分布式协议的背景下,这是非常复杂的,由于其异步性质。在这项工作中,我们研究了一种基于正交截止的方法来验证分布式协议,该方法避开了寻找归纳不变量的问题,而是将检查正确性降低到有限状态验证问题。其主要思想是找到一个有限的、固定的协议实例,称为截断实例,如果截断实例是安全的,那么任何协议实例也是安全的。以前的截止为基础的方法只适用于一类有限的协议和规范。我们形式化的截断方法的通用协议建模语言(RML)的上下文中,并确定充分的条件,可以有效地编码在SMT检查是否一个给定的协议实例是一个截止实例。此外,我们提出了一个简单的静态分析为基础的算法,自动合成一个截止的实例。我们已经成功地应用我们的方法在一些复杂的分布式协议,提供了第一个已知的截止结果,其中许多。
2022-11-28 cs.DC cs.PL
RustyDL: A Program Logic for Rust
Technische Universität Darmstadt(达姆施塔特工业大学)
RustyDL 是一种针对 Rust 的程序逻辑,旨在为自动交互式演绎验证工具提供基础,通过源代码级别推导提升复杂功能属性的验证能力。
2026-02-25 cs.LO cs.PL
InvWeaver: Deductive Feedback for Invariant Synthesis in Interacting-Loop Programs
Nanjing University(南京大学);Hunan University(湖南大学);Birkbeck, University of London(伦敦大学伯贝克学院)
研究针对交互循环程序的不变式合成难题,提出神经符号框架InvWeaver,通过循环级抽象等方法揭示循环间依赖并传播证明义务,在综合基准套件上评估,其性能显著优于现有方法,能有效解决多循环问题并保持单循环任务优势。
2026-07-08 cs.LG cs.PL
Cobblestone: A Divide-and-Conquer Approach for Automating Formal Verification
University of Illinois Urbana-Champaign(伊利诺伊大学厄巴纳-香槟分校);University of Massachusetts(马萨诸塞大学);Cornell University(康奈尔大学);Rutgers University(罗格斯大学)
Cobblestone通过大语言模型生成证明并分解问题,有效提升形式验证自动化水平,证明更多定理且成本低。
2026-04-06 cs.AI cs.LO cs.PL
QEDCartographer: Automating Formal Verification Using Reward-Free Reinforcement Learning
QEDCartographer结合监督与强化学习,利用证明分支结构实现无奖励搜索,在CoqGym基准上自动证明21.4%的定理,优于现有工具,证明强化学习可有效提升证明合成搜索机制。
2024-12-17 cs.LG cs.PL cs.SE
Reasoning about Iteration and Recursion Uniformly based on Big-step Semantics
可靠的演绎程序验证技术应该被证明是相对于程序设计语言的语义合理的。对于每一种不同的语言,构造一个单独的可靠性证明往往是一项艰巨的任务。在独立于语言的程序验证中,讨论了计算机程序的共同方面,以使所有语言都能进行合理的推理。在这项工作中,我们提出了一个解决方案,合理的推理迭代和递归的基础上的大步骤操作语义的任何程序设计语言。我们给出了我们的推理技术的合理性和相对完整性的归纳证明。我们说明了在简化的程序设计语言的命令式和功能的范例,具有不同的功能的技术。我们还在Coq证明助手中机制化所有正式结果。
2021-08-04 cs.PL
Generically Automating Separation Logic by Functors, Homomorphisms and Modules
本文提出基于函子、同态和环上模的抽象代数理论来刻画分离逻辑谓词,并开发通用自动化算法及自动实例化方法,在 Isabelle/HOL 中实现对复杂数据结构的高效验证。
2025-07-04 cs.LO cs.PL
CISE3: Verificação de aplicações com consistência fraca em Why3
在这篇文章中,我们提出了一个工具,用于验证建立在顶级复制数据库上的程序。该工具评估顺序规范,并推断哪些操作需要同步,以便程序在分布式环境中正常运行。我们的原型是建立在演绎验证平台Why3。Why3框架提供了一个复杂的用户体验,扩展到现实案例研究的可能性,以及高度的自动化。一个案例研究和讨论,实验验证我们的方法的目的。
2019-09-09 cs.LO cs.PL
OpenJML: Software verification for Java 7 using JML, OpenJDK, and Eclipse
OpenJML是一个检查Java程序的代码和规范的工具。我们描述了我们的经验,建立在JML,OpenJDK和Eclipse的基础上的工具,以及在基于规范的软件验证的许多进步。该实现展示了直接在软件开发IDE中集成规范工具的价值,以及尽可能多地自动化任务的价值。该工具,虽然仍在进行中,现在已被用于几个大学水平的课程,软件规范和验证,并对现有的Java程序的小规模研究。
2014-04-26 cs.LO cs.PL cs.SE
Verifying C11-Style Weak Memory Libraries
演绎验证的并发程序在弱内存下,到目前为止,仅限于简单的程序在一个单一的状态空间。对于可伸缩性,我们还需要具有可验证库抽象的模块化技术。本文解决了这一挑战的背景下,RC 11 RAR,C11内存模型的一个子集,允许放松和释放获取访问,但不允许,所谓的负载缓冲周期。我们开发了一个简单的框架,用于指定抽象对象,精确地描述了抽象方法调用的可观察性保证。我们展示了如何将这个框架与一个操作语义集成,该操作语义使客户端程序执行它使用的库中的抽象方法调用的验证成为可能。最后,我们将展示如何实现这样的抽象在RC 11 RAR可以验证通过开发一个(上下文)细化框架的抽象对象。我们的框架,包括操作语义,客户端库程序的验证技术,和抽象库和它们的实现之间的模拟,已在伊莎贝尔/HOL机械化。
2020-12-28 cs.LO 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
Verification of Threshold-Based Distributed Algorithms by Decomposition to Decidable Logics
容错分布式协议的验证是一项非常困难的任务。通常,在这些协议中,在过程代码和其正确性证明中都使用关于集合基数的阈值,例如,进程仅在其已从至少一半的对等体接收到确认时才可执行动作。基于阈值的协议的验证是非常具有挑战性的,因为它涉及两种推理:关于协议的无界状态的一阶推理,以及关于集合和基数的推理。在这项工作中,我们开发了一种新的方法,用于将此类协议的验证任务分解为两个可判定的逻辑:EPR和BAPA。我们的关键见解是,这样的协议使用阈值在一个有限的方式作为一种手段,以获得某些属性的“交集”之间的集合。我们定义了一种语言来表达这样的属性,并提出了两个翻译:EPR和BAPA。EPR转换允许验证协议,同时假设这些属性,BAPA转换允许验证属性的正确性。我们进一步开发了一种算法,用于自动生成验证给定协议所需的属性,便于全自动演绎验证。使用这种技术,我们已经验证了几个具有挑战性的协议,包括拜占庭一步共识,混合可靠广播和快速拜占庭Paxos。
2019-05-19 cs.DC cs.LO cs.PL
Behavioral Program Logic and LAGC Semantics without Continuations (Technical Report)
我们提出的行为程序逻辑(BPL),跟踪属性的动态逻辑,结合了行为类型的概念,并允许推理的非功能性的属性内的一个微积分。BPL使用行为模式[s|- τ ],以针对行为规范τ验证语句s。行为规范概括了后置条件和行为类型。它们可用于指定其他静态分析,例如,数据流分析这使得对同一程序的多个分析结果的演绎推理成为可能,可能以不同的形式实现。我们的演算BPL验证的行为规范逐渐,常见的行为类型。这极大地简化了局部结果的规范、演算和组成。我们提出了一个面向对象的演员与期货,集成了指针分析和桥梁之间的差距行为类型和演绎验证的微积分。本技术报告介绍了(1)没有延续的核心活动对象语言(CAO)的完整LAGC语义(2)行为程序逻辑和(3)给出了行为程序逻辑中表示的行为类型的示例,方法类型。此报告包含方法类型的可靠性证明。虽然语义覆盖了带有挂起的CAO,但方法类型没有,以简化表示。
2019-04-30 cs.LO cs.PL
A Program Logic to Verify Signal Temporal Logic Specifications of Hybrid Systems: Extended Technical Report
信号时序逻辑(STL)被引入到连续和混合系统的连续时间信号的时间特性监测。引入微分动态逻辑(dL)对混合程序的结束状态进行推理。在过去的十年中,STL及其变体在行业中用于监控目的的普及程度显著提高,而dL在混合系统的验证方面也越来越受欢迎。在本文中,我们通过引入信号时序动态逻辑(STdL)-一个动态逻辑的原因,STL规范的一个子集的混合动力系统的执行之间的差距。我们的工作表明,STL可以用于混合系统的演绎验证。STdL通过允许在给定的时间间隔内对时间属性进行推理来显着增强dL的表达能力。我们提供了一个语义和STdL的证明演算,以及证明的合理性和相对完整性。
2021-03-16 cs.LO cs.PL
Verifying First-Order Temporal Properties of Infinite-State Systems via Timers and Rankings
Tel Aviv University(特拉维夫大学);Certora;Weizmann Institute of Science(魏茨曼科学研究所)
通过计时器和排名验证无限状态系统的首阶时间属性,利用隐式排名和SMT求解器实现终止性证明。
2026-01-19 cs.LO cs.PL