The WhyRel Prototype for Relational Verification
程序之间的互操作关系在各种验证环境中作为一项任务出现,例如优化转换,将新版本的程序与旧版本(回归验证)和不干扰。然而,现有的工具,它提供了一个高水平的自动化的成本限制的程序考虑的关系验证的程序动态分配的可变状态的支持并不好。另一方面,自动激活工具需要更多的用户交互,但可以验证更广泛的程序类别。本文介绍了WhyRel,一个基于关系区域逻辑的指针程序关系属性自动验证工具。WhyRel通过验证案例研究进行评估,依赖于由Why3平台编排的SMT求解器。案例研究包括建立表示独立的ADT,显示不干扰,并从最近的文献挑战的问题。
2023-03-25 cs.LO cs.PL
Foundations for Deductive Verification of Continuous Probabilistic Programs: From Lebesgue to Riemann and Back
本文为含循环、连续分布和条件化的概率程序验证奠定基础,通过黎曼和近似积分实现SMT不变量验证,并证明收敛性与完备性,且可在现有工具中应用。
2025-02-26 cs.LO cs.PL
Verification of Object-Oriented Programs: a Transformational Approach
我们表明,验证面向对象的程序,通过断言的方法,可以实现在一个简单的方式,通过利用一个语法导向的转换,从面向对象的程序递归程序。这种转换表明自然的证明规则和它的正确性,帮助我们建立健全和相对完整的证明系统。困难之一是如何在断言语言中正确处理实例变量和别名。所讨论的程序设计语言支持数组、实例变量、失败和带参数的递归方法。
2011-11-08 cs.LO cs.PL
Analysis and Transformation of Constrained Horn Clauses for Program Verification
本文综述了最近的工作应用分析和转换技术,起源于约束逻辑编程(CLP)领域的问题,验证软件系统。我们提出了基于专业化的技术翻译验证问题,为不同的程序设计语言,并在一般的软件系统,到满足性问题的约束霍恩条款(CHCs),一个术语,已成为流行的验证领域,指CLP程序。然后,我们描述了静态分析技术的CHCs,可用于推断相关的程序属性,如循环不变。我们还概述了一些转换技术的基础上专业化和折叠/展开规则,这是有用的,以提高CHC可满足性工具的有效性。最后,我们讨论了应用这些技术的未来发展。
2021-08-02 cs.LO cs.PL
Constraint-based automatic verification of abstract models of multithreaded programs
我们提出了一种多线程程序的抽象模型的自动验证技术,提供新鲜的名称生成,名称移动性和无界控制。作为高级规约语言,我们在这里采用了一个扩展的通信有限状态机的局部变量范围在一个无限的域名,称为TDL程序。通信机已被证明是非常有效的表示通信协议,以及表示多线程软件的抽象。我们提出的验证方法是基于编码的TDL程序成一个低级语言的基础上多集重写和约束,可以被看作是一个扩展的Petri网。通过这种编码,符号验证过程中开发的低级语言在我们以前的工作,现在可以应用到TDL程序。此外,编码使我们能够隔离TDL程序,仍然提供新鲜的名称生成,名称移动性和无界控制的可判定类的验证问题。我们的语法限制实际上是在线程的内部结构上定义的:为了获得一个完整的终止方法,线程最多只能有一个局部变量(范围在无限的域名上)。
2006-01-10 cs.LO cs.PL
Automated Verification of Reactive and Concurrent Programs by Calculation
反应式程序将传统的顺序编程结构与原语相结合,以允许与其他并发代理进行通信。它们在现代应用中无处不在,从组件系统和Web服务到网络物理系统和自主机器人。在本文中,我们提出了一个代数验证策略的并发反应式程序,与一个大的或无限的状态空间。我们定义了新的运营商来描述相互作用和状态更新,以及相关的方程理论。有了这个,我们可以计算一个反应式程序的指称语义,从而促进自动证明。值得注意的是,我们的推理支持迭代程序与反应不变量,Kleene代数的基础上,并行组成。我们通过验证反应缓冲区来说明我们的策略。我们的法律和战略是机械化的伊莎贝尔/UTP,我们的霍尔和他的统一编程理论(UTP)框架的实施,提供健全的保证和实际的验证支持。
2021-04-12 cs.LO cs.PL
Relatively Complete Verification of Probabilistic Programs
我们研究的语法指定定量的“断言”-函数映射程序状态的数字-概率程序验证。我们证明,我们的语法是表达在以下意义上:给定任何概率程序$C$,如果一个函数$f$是表达在我们的语法,然后映射每个初始状态$σ$的期望值$f$评估在$σ$(也称为最弱的预期$\textit{wp} [C](f)$)终止后达到的最终状态也是表达在我们的语法。因此,我们得到了一个相对完整的验证系统的预期值和概率的意义上的推理库克:除了证明一个单一的两个功能之间的不平等的语法表达式在我们的语言,给定$f$,$g$,$C$,我们可以检查是否$g \preceq \textit{wp} [C] (f)$。
2022-01-28 cs.LO cs.PL
A sound spatio-temporal Hoare logic for the verification of structured interactive programs with registers and voices
具有寄存器和语音的交互式系统(简称“rv系统”)是一种用于交互式计算的模型,该模型相对于时空对偶变换获得了闭寄存器机(“语音”是“寄存器”的时间对偶对应物)。同样的,AGAPIA v0.1,一种用于rv系统的结构化程序设计语言,是经典while程序(针对特定类型的数据)的时空对偶闭包。典型的AGAPIA程序描述了位于不同地点的开放过程,并具有对环境做出适当反应的时间窗口。该语言自然地支持流程迁移、结构化交互和在异构机器上部署组件。本文介绍了一种用于验证AGAPIA v0.1程序的类Hoare时空逻辑。作为一个案例研究,一个流行的分布式终止检测协议的形式化验证证明。
2008-10-19 cs.LO cs.PL
Sound and Complete Witnesses for Template-based Verification of LTL Properties on Polynomial Programs
本文提出命令式程序LTL验证的可靠完备证据,并针对多项式算术程序给出自动合成LTL证据的高效算法,实验证明其能处理以往工具无法处理的程序。
2024-07-01 cs.LO cs.PL
Products of Recursive Programs for Hypersafety Verification (Extended Version)
针对无限状态递归程序的自动超安全性验证问题,提出一类无限递归乘积程序,结合语言理论与并发理论构造算法,将超安全性验证简化为标准安全性验证,并通过实现和实验证明有效性。
2025-08-23 cs.LO cs.PL
Modular Formal Verification of Rust Programs with Unsafe Blocks
Rust是一种现代系统程序设计语言,其类型系统保证内存安全。为了表现力和性能,它允许程序员暂时放松类型规则,使用不安全的代码块。然而,在不安全的块中,确保代码最终不会有未定义行为的负担是在程序员身上。即使是最专业的程序员也会犯错误,不安全块中的内存安全错误会使所有类型系统保证无效。为了解决这个问题,我们正在尝试使用我们的模块化符号执行算法来验证Rust不安全代码的可靠性。本文概述了我们的方法和迄今取得的进展。
2022-12-26 cs.LO cs.PL
Parameterized Verification of Deterministic MPI Programs
University of Delaware(特拉华大学)
研究确定性MPI程序验证问题,通过用户提供特定函数将程序转换为参数化顺序程序,利用Frama-C/Wp扩展实现该验证方法。
2026-07-21 cs.LO cs.PL
Aiming Low Is Harder -- Induction for Lower Bounds in Probabilistic Program Verification
我们提出了一个新的归纳规则,用于验证概率循环执行后的随机变量的期望值的下界以及它们的预期运行时间。我们的规则是简单的,因为循环体语义只需要经常应用,以验证候选确实是下界。特别是,它不需要像许多以前的规则那样找到序列的极限。
2021-08-11 cs.LO cs.PL
Proceedings of the Third International Workshop on Verification and Program Transformation
本卷包含2015年4月11日在英国伦敦举行的第三届验证和程序转换国际研讨会(VPT 2015)上发表的论文。讲习班的前两届讲习班分别于2013年在圣彼得堡(俄罗斯)和2014年在维也纳(奥地利)举行。这些论文表明,在程序转换领域中开发的方法和工具,如部分求值和折叠/展开转换,以及超级编译,可以应用于软件系统的验证。他们还展示了一些程序验证方法,如模型检验技术,抽象解释,SAT和SMT解决,自动定理证明,可以用来增强程序转换技术,从而使这些技术在实践中更强大和有用。
2015-12-06 cs.LO cs.PL cs.SE
Proceedings Fifth International Workshop on Verification and Program Transformation
本卷包含第五届验证和程序转换国际研讨会(VPT 2017)的会议记录。研讨会于2017年4月29日在瑞典乌普萨拉举行,隶属于欧洲软件理论与实践联合会议(ETAPS)。VPT研讨会系列的目的是提供一个论坛,来自程序转换和程序验证领域的人们可以富有成效地交换意见,并对这两个领域之间的相互作用有更深入的了解。在研讨会上宣读了七篇论文。此外,Javier Esparza(德国慕尼黑工业大学)、Manuel Hermenegildo(西班牙马德里IMDEA软件研究所)和Alexey Khoroshilov(俄罗斯莫斯科ISPRAS Linux验证中心)也应邀进行了三次演讲。
2017-08-23 cs.LO cs.PL cs.SE
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
Verification Logics for Quantum Programs
我们调查景观的霍尔逻辑的量子程序。我们回顾三篇论文:Chadha,Mateus和Sernadas的“Reasoning about imperative quantum programs”; Yoshihiko Kakutani的“A logic for形式化验证of quantum programs”; Mingsheng Ying的“Floyd-霍尔逻辑for quantum programs”。我们比较了逻辑的数学基础,它们的底层语言,以及它们的断言的表达能力。我们还使用这些语言对Deutsch-Jozsa算法进行了验证,并讨论了它们在实际中的相对可用性。
2019-04-08 cs.ET cs.LO cs.PL
Decidable Verification of Uninterpreted Programs
我们研究的问题是完全自动验证未解释的程序--程序工作在任意的数据模型,提供了一个解释的常数,功能和程序使用的关系。验证问题询问给定的程序是否满足使用无量词公式编写的后置条件,在最终状态上具有相等性,没有提供循环不变式,合同等。我们证明了这个问题在一般情况下是不可判定的。本文的主要贡献是一个子类的程序,称为一致的程序,承认可判定的验证,并可以决定在PSPACE。然后,我们扩展这类程序的程序,是$k$ -连贯的,其中$k \in \mathbb{N}$,通过(自动)添加$k$鬼变量和分配,使它们连贯。我们还扩展了可判定性的结果与递归函数调用的程序,并证明了几个不可判定性的结果,表明为什么我们的限制,以获得可判定性似乎是必要的。
2020-08-26 cs.FL 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
Structural Temporal Logic for Mechanized Program Verification
本文提出结构化时序逻辑 Ticl,将复杂(共)归纳证明编码为结构化引理,支持在证明助手中以高抽象层次对调度、并发共享内存和分布式共识程序进行安全性与活性性质的组合式机械化验证。
2025-08-21 cs.LO cs.PL
Invariant Detection with Program Verification Tools
编译器可以专门化具有不变量的程序,以提高性能。然而,对于编译器来说,检测跨越大而复杂的代码的程序不变量是困难的。传统的编译器不执行非常昂贵的分析,因此只能识别有限的不变量,这限制了后续优化的潜力。我们希望通过更复杂的分析,使用程序验证工具来解决不变检测问题。在本文中,我们揭示了选择程序验证工具的不变量检测的陷阱,确定使用这些工具之一-CVC 4建模程序行为的挑战,并提出了一些想法如何解决的挑战。
2019-06-27 cs.PL
Verification of C++ Programs with VeriFast
VeriFast是一个基于分离逻辑的原型工具,用于C和Java程序的模块化验证。我们正在添加对C++的支持。在本报告中,我们描述了到目前为止我们添加支持的C++特性,以及我们为这些特性生成的证明义务。在这一点上,VeriFast基本支持C++的大多数面向对象编程功能:成员函数、成员函数和运算符重载、隐式和显式转换、构造函数和初始化列表、析构函数、引用类型、堆栈或堆上的分配和释放(使用new和delete)、继承(包括多重继承,但不包括虚基类)、虚成员函数和重写。为了支持继承层次结构的规范,我们添加了对实例谓词的支持,可以在基类中引入实例谓词,并在派生类中重写实例谓词。目前缺少的主要功能是对C++模板的支持,我们计划下一步进行改进。
2022-12-28 cs.LO cs.PL
Proceedings 9th Workshop on Horn Clauses for Verification and Synthesis and 10th International Workshop on Verification and Program Transformation
这些会议记录包括在第九届验证和合成霍恩条款研讨会和第十届验证和程序转换国际研讨会上提交的选定论文,这两个研讨会都隶属于ETAPS 2022。许多感兴趣的程序验证和综合问题可以直接使用Horn子句建模,CLP和CAV社区的许多最新进展都集中在有效地解决Horn子句提出的问题上。HCVS系列研讨会旨在汇集在约束/逻辑编程社区工作的研究人员(例如,ICLP和CP),程序验证(例如,CAV、TACAS和VMCAI)和自动演绎(例如,CADE,IJCAR),关于基于Horn子句的分析、验证和综合的主题。这些团体在不同的时期从不同的角度倡导关于核查和综合的霍恩条款,组织HCVS是为了促进互动和富有成效的经验交流和整合。VPT研讨会的目的是汇集在程序验证和程序转换领域工作的研究人员。这两个领域之间有很大的潜力进行有益的互动,因为:1)一方面,在程序转换领域开发的方法和工具,如部分评估,折叠/展开转换和超级编译,都已成功应用于验证无限状态和参数化系统。2)另一方面,模型检验,抽象解释,SAT和SMT解决和自动定理证明已被用来加强程序转换技术。此外,程序转换工具的正式认证,如自动重构工具和编译器,最近吸引了相当大的兴趣,提出了重大挑战。
2022-11-19 cs.LO cs.PL cs.SC
Automated Deductive Verification for Ladder Programming
梯形图逻辑是IEC 61131-3标准化的程序设计语言,广泛用于对工业可编程逻辑控制器(PLC)进行编程。PLC程序由输入(其值在运行时由工厂传感器给出),输出(其值在运行时提供给工厂执行器)和从输入值计算输出值的逻辑表达式组成。由于梯形图程序的图形形式,以及典型工业程序中的输入和输出量,调试此类程序既耗时又容易出错。在本文中,我们提出了一个基于Why 3的工具原型,我们已经实现了自动化的演绎验证的使用,以提供一个易于使用和强大的调试工具的阶梯程序员。
2019-12-23 cs.LO cs.PL cs.SE
Formal Verification of Spacecraft Control Programs Using a Metalanguage for State Transformers
验证控制程序的功能正确性是开发空间电子设备的一项基本任务;它既困难又耗时,而且在开发时间方面通常超过设计和编程任务。我们提出了一种验证方法,旨在帮助航天器工程师减少所需的努力,形式化验证的低级别控制程序上执行的自定义硬件。该方法使用元语言将程序的语义描述为一个状态转换器Transformer,可以编译为多个目标,用于测试、形式化验证和代码生成。元语言本身嵌入在强类型宿主语言(Haskell)中,提供了一种在类型级别证明程序属性的方法,可以缩短反馈循环,进一步提高工程师的生产力。验证方法是证明了一个工业案例研究。我们提出的REDFIN,在空间任务中使用的处理核心,其正式的语义表示使用建议的元语言,其次是一个简单的控制程序的验证的详细例子。
2018-02-06 cs.PL
Modular Verification of Concurrent Programs via Sequential Model Checking
这项工作利用了过多的工作验证顺序程序的目的,验证并发程序。我们减少了一个并发程序的验证一系列的顺序程序的验证任务。我们的方法是模块化的,在这个意义上,每个顺序的验证任务大致对应于一个线程的验证,与一些额外的信息,它在其中运行的环境。根据需要,在算法运行期间收集关于环境的信息。虽然我们的方法是通用的,它专门针对线程层次结构的并发程序。这个想法是利用层次结构,以最大限度地减少需要在线程之间传输的信息量。为此,我们验证的线程之一,认为“主”,作为一个顺序程序。它的验证过程向它的“环境”(可能包含多个线程)发起查询。如果环境由单个线程组成,则通过顺序验证来回答这些查询,否则,通过在环境上应用相同的分层算法来回答这些查询。我们的技术是全自动的,并允许我们使用任何现成的顺序模型检查器。我们实现了我们的技术在一个工具,称为CoMuS和评估它对建立并发验证工具。我们的实验表明,它的工作特别好的层次结构的程序。
2021-06-01 cs.PL
HyPLC: Hybrid Programmable Logic Controller Program Translation for Verification
可编程逻辑控制器(PLC)为安全关键型工业控制系统提供了一个突出的实施平台选择。形式化验证提供了建立正确性保证的方法,这对于这样的安全关键应用是非常重要的。但是,由于PLC代码不包括系统工厂的分析模型,其验证仅限于离散属性。在本文中,我们,因此,开始周围的混合程序,包括连续的植物模型,除了离散控制算法的其他方式。甚至混合程序的深层正确性属性也可以在定理证明器KeYmaera X中正式验证,该定理证明器实现了混合程序的微分动态逻辑dL。在验证了混合程序后,我们现在提出了一种将混合程序转换为PLC代码的方法。新的工具,HyPLC,实现这种翻译的离散控制代码的验证混合程序模型的PLC控制器代码,反之亦然,翻译现有的PLC代码到离散控制动作的混合程序给定一个额外的输入的连续动态的系统进行验证。这种方法允许生成真实的控制器代码,同时通过编译来保持有效和经验证的混合程序的正确性。PLC是安全关键型工业控制应用的常见网络物理接口,HyPLC作为一种实用的工具,用于在混合程序的算法级与具体PLC实现的执行层上桥接复杂网络物理系统的形式化验证。
2019-02-14 cs.FL cs.LO cs.PL
Higher-Order Program Verification via HFL Model Checking
模型检验有两种高阶扩展:HORS模型检验和HFL模型检验。虽然前者已被应用于高阶函数程序的自动验证,后者的应用还没有得到很好的研究。在本文中,我们表明,各种验证问题的功能程序,包括可能/必须可达性,跟踪性能,线性时间的时间属性(及其否定),可以自然地减少到(扩展)HFL模型检验。这些减少产生一个健全的和完整的逻辑特性的程序。与以往基于HORS模型检验的方法相比,该方法为高阶程序验证提供了一种更加统一、高效的方法。
2018-02-28 cs.PL
KestRel: Relational Verification Using E-Graphs for Program Alignment
本文提出KestRel关系验证方法,利用e-graph、等式饱和及数据驱动提取技术构建语义对齐的中间程序,以简化多程序关系性质验证。
2025-03-12 cs.PL
Compositional Program Verification with Polynomial Functors in Dependent Type Theory
Carnegie Mellon University(卡内基梅隆大学)
本文基于依赖类型理论的多项式函子提出组合程序验证框架,通过多项式函子作为接口、自由monad的Kleisli态射作为实现,并利用Mealy机提供组合性操作语义,揭示了规范到接口的monoidal函子结构,拓展至并发与关系验证等场景。
2026-04-01 cs.LO cs.PL math.CT
Gobra: Modular Specification and Verification of Go Programs (extended version)
Go是一种越来越流行的系统程序设计语言,特别是针对并发和分布式系统。Go语言与其他命令式语言的不同之处在于,它通过goroutine提供了结构化的子类型和轻量级的并发性以及消息传递通信。这些特性的组合为静态验证提出了有趣的挑战,最突出的是可变堆和高级并发原语的组合。我们提出Gobra,一个模块化的,演绎的程序验证器,证明内存安全,崩溃安全,数据竞争自由,和用户提供的规范。Gobra基于分离逻辑,支持Go语言的一个大子集。它的实现将带注释的Go程序转换为Viper中间验证语言,并使用现有的基于SMT的验证后端来计算和履行证明义务。
2021-05-28 cs.PL
Noise-aware Verification and Synthesis of Quantum Programs
Institute of Science and Technology in Austria (ISTA)(奥地利科学与技术研究所)
本文针对真实有噪声硬件上的量子程序,开发噪声感知量子霍尔逻辑,实现特定硬件量子程序的有界验证与噪声最优无循环量子程序综合,经IBM Qiskit评估,发现经典概率分支是量子编程最优的必要条件。
2026-10-21 cs.FL cs.LO cs.PL
CoqQ: Foundational Verification of Quantum Programs
CoqQ是Coq证明助手中的一个量子程序推理框架。其主要组成部分是:一种深度嵌入的量子程序设计语言,它可以很容易地表达经典的量子算法,以及一种用于证明程序性质的表达性程序逻辑。CoqQ是基础:该程序逻辑被形式上证明相对于基于现有技术的数学库(Mathcomp和Mathcomp分析)的指称语义是可靠的。CoqQ也很实用:断言可以使用狄拉克表达式,这简化了简洁的规范,证明可以利用本地和并行推理,这最大限度地减少了验证工作。我们用文献中的许多例子说明了CoqQ的适用性。
2022-07-22 cs.PL
Removing Unnecessary Variables from Horn Clause Verification Conditions
验证条件(Verification Conditions,VC)是一种逻辑公式,其可满足性保证了程序的正确性。我们认为VC的形式约束霍恩条款(CHC),这是自动生成的编码(解释器)的程序设计语言的操作语义。VC是通过基于展开/折叠变换规则的程序专门化而得到的,并且正如在专门化解释器时经常发生的那样,它们包含不必要的变量,即,在验证下的程序的正确性证明不需要的变量。在本文中,我们适应的CHC设置的一些技术,开发用于删除不必要的变量,从逻辑程序,我们表明,在某些情况下,这些技术的应用增加了霍恩子句求解器的有效性时,证明程序的正确性。
2016-07-15 cs.LO cs.PL cs.SE
Automatic HFL(Z) Validity Checking for Program Verification
本文提出了一种自动化的方法来检验HFL(Z)公式的有效性,HFL(Z)是一种高阶逻辑,具有不动点算子和整数。结合Kobayashi et al.的减少,从高阶程序验证HFL(Z)的有效性检查,我们的方法产生一个全自动的,统一的验证方法的任意时间属性的高阶功能程序表示的模态μ演算,包括终止,非终止,公平终止,公平非终止,也分支时间属性。我们已经实现了我们的方法,并取得了可喜的实验结果。
2022-12-09 cs.PL
Proceedings 8th International Workshop on Verification and Program Transformation and 7th Workshop on Horn Clauses for Verification and Synthesis
会议记录包括阿尔贝托的主题论文,随后由洛伦佐克莱门特(美国)撰写的6份邀请论文。华沙),阿兰芬克尔(美国。Paris-Saclay),John Gallagher(Roskilde U.和IMDEA软件研究所)等,尼尔·琼斯(美国)Copenhagen)等人,Michael Leuschel(Heinrich-Heine U.)和Maurizio Proietti(IASI-CNR)等人。这些邀请论文之后是VPT 2020上接受的4篇常规论文和HCVS 2020的论文,其中包括三篇投稿论文和一篇关于第三届约束Horn子句求解器竞赛的邀请论文。此外,Andrzej Skowron(U.华沙),索菲雷诺(EPO)和莫阿约翰逊(查尔默斯大学),包括在内。
2020-08-06 cs.LO cs.PL cs.SC
Towards Automated Verification of LLM-Synthesized C Programs
Purdue University(普渡大学)
本文提出 \synver{} 框架,通过对 LLM 生成的 C 程序施加语法与语义偏置,并基于 Verified Software Toolchain 构建验证工具,实现程序合成与自动化验证。
2025-10-20 cs.PL
RustHorn: CHC-based Verification for Rust Programs (full version)
约束Horn子句的可满足性问题约简是一种被广泛研究的自动程序验证方法。然而,目前基于CHC的指针操作程序方法的可扩展性不是很好。本文提出了一种将指针操作Rust程序转换为CHC的新方法,该方法通过利用所有权来清除指针和内存。我们形式化了Rust的简化核心的翻译,并证明了它的正确性。我们已经为Rust的一个子集实现了一个原型验证器,并证实了我们方法的有效性。
2020-06-11 cs.PL
Automating Deductive Verification for Weak-Memory Programs
为弱内存模型(如C11内存模型)编写正确的程序是具有挑战性的,因为这些模型提供了弱一致性保证。最近提出了第一个程序逻辑验证这样的程序,但它们的使用一直局限于迄今为止的手动证明。通过一阶求解器在这些逻辑中自动化证明是不平凡的,因为推理功能,如高阶断言,模态和丰富的权限资源。在本文中,我们提供了第一个实现弱内存程序逻辑使用现有的演绎验证工具。我们讨论了三种最新的程序逻辑:放松的分离逻辑和两种形式的围栏分离逻辑,并展示了如何使用Viper验证基础设施对这些逻辑进行编码。在这样做时,我们说明了几种新的编码技术,可用于其他逻辑。我们的工作已经实施,并已从现有的论文以及Facebook的开源Folly库的例子进行了评估。
2018-02-19 cs.PL
Ownership Types for Verification of Programs with Pointer Arithmetic
本文扩展Toman等人结合所有权与精化类型的低级程序验证类型系统以支持指针算术,证明可靠性并实现原型工具,实验表明可自动验证无断言错误。
2023-12-11 cs.PL
Source-Level Bitwise Branching for Temporal Verification
将验证工具应用于具有位向量操作的程序的兴趣越来越大。SMT求解器作为这些工具的基础,因此通过位爆破和线性算术近似增加了对位向量推理的支持。然而,验证工具在位向量程序的终止和LTL验证方面仍然受到限制。在这项工作中,我们表明,类似的线性算术近似位向量操作可以在源代码级别通过转换。具体来说,我们引入了新的路径,这些路径通过线性条件/约束过度近似位向量操作,增加了分支,但使我们能够更好地利用成熟的整数推理和验证工具的插值。我们提出了两套规则,即重写规则和弱化规则,可以实现为程序转换的按位分支,分支路径可以帮助验证工具扩展验证任务的位向量程序。我们的实验表明,这种利用整数推理和插值,使竞争终止验证的位向量程序,并导致第一个有效的技术LTL验证的位向量程序。
2021-11-04 cs.PL
Proceedings Third Workshop on Models for Formal Analysis of Real Systems and Sixth International Workshop on Verification and Program Transformation
本卷包含MARS 2018的联合会议记录,第三次真实系统形式分析模型研讨会,以及VPT 2018,第六次验证和程序转换国际研讨会,于2018年4月20日在希腊塞萨洛尼基举行,作为ETAPS 2018的一部分,欧洲软件理论与实践联合会议。MARS强调建模而非验证。它的目的是讨论从制定正式的方法来验证和分析现实的系统中吸取的教训。例如:(1)选择哪种形式主义,为什么?(2)必须进行哪些抽象,为什么?(3)系统的重要特征是如何建模的?(4)在对系统建模时是否有任何并发症?(5)采取了哪些措施来保证模型的准确性?我们邀请了论文,提出了真实系统的完整模型,这可能会为未来的比较和分析奠定基础。研讨会的目的之一是介绍不同的建模方法,并讨论每种方法的利弊。在这次研讨会上提出的系统的替代正式描述是鼓励,这应该促进改进规范形式主义的发展。VPT旨在提供一个论坛,来自程序转换和程序验证领域的人们可以卓有成效地交换意见,并对这两个领域之间的相互作用有更深入的了解。这些互动在两个方面都是有益的。一方面,在程序转换领域开发的方法和工具,如部分演绎,部分求值,折叠/展开变换和超级编译,成功地应用于验证,特别是无限状态和参数化系统的验证。另一方面,在程序验证中开发的方法,如模型检验,抽象解释,SAT和SMT求解,自动定理证明,用于增强程序转换技术,从而使这些技术在实践中更强大和有用的。
2018-03-23 cs.FL cs.LO cs.PL
A Deductive Verification Infrastructure for Probabilistic Programs (Extended Version)
RWTH Aachen University(亚琛工业大学);Saarland University(萨尔兰州立大学);University College London(伦敦大学学院);Technical University of Denmark(丹麦技术大学)
本文提出一个面向离散概率程序的定量验证基础设施,类似Boogie,采用实值逻辑和中间验证语言,支持期望性质验证,并基于SMT实现自动验证多种基准。
2026-09-24 cs.PL
Verification of Programs via Intermediate Interpretation
我们探讨了一种方法来验证程序通过程序转换适用于解释器的程序设计语言。一种被称为Turchin超级编译的专门化技术被用来专门化程序模型的一些解释器。我们发现,几个安全属性的功能程序建模一类的缓存一致性协议可以证明由超级编译器和比较结果与我们以前的工作直接验证通过超级编译不使用中间解释。我们的方法部分受到了E. De Angelis等人(2014-2015)在约束逻辑程序专门化的背景下研究了通过程序转换和中间解释进行的验证。
2017-08-24 cs.PL cs.SE
Finite Countermodel Based Verification for Program Transformation (A Case Study)
自动程序验证和程序转换都是以程序分析为基础的。在过去的十年中,一些方法使用各种自动通用程序转换技术(部分演绎,专业化,超级编译)的计算系统的不可达性属性的验证被引入和演示。另一方面,基于语义的展开-折叠程序转换方法提出了各种各样的可达性任务,并试图解决它们,旨在改善被转换程序的语义树。这意味着可以使用一些通用的验证方法来加强程序转换技术。本文讨论了Turchin的超级编译方法中如何使用安全验证方法的有限反模型的问题。我们提取了一些超级编译子算法,试图解决可达性问题,并演示了使用外部countermodel查找器来解决一些问题。
2015-12-12 cs.PL cs.SE
Proving False in Object-Oriented Verification Programs by Exploiting Non-Termination
我们研究了三种不同的面向对象程序验证器:Gobra、KeY和Dafny。我们表明,所有这三个可以证明假使用一个简单的技巧与幽灵变量声明和非终止代码。这表明,这些语言的验证器可以产生不合理的结果,没有太大的困难,这可能是所有面向对象的验证器共同的。
2022-12-05 cs.PL
Natural Hoare Logic: Towards formal verification of programs from logical forms of natural language specifications
形式化验证为软件的正确性提供了强有力的保证,这在安全或安全关键系统中尤为重要。霍尔逻辑是一种广泛使用的形式主义,用于以前置条件/后置条件断言的形式针对规范对软件进行严格验证。语义解析技术的进步和更高的计算能力使我们能够从自然语言文本中提取语义内容作为形式逻辑形式,具有越来越高的准确性和覆盖率。本文提出了一个基于霍尔逻辑的命令式程序形式化验证的形式化框架,该框架使用由自然语言断言的组合语义解析生成的逻辑形式。我们称这种推理方法为自然霍尔逻辑。这使得能够直接针对领域专家以自然语言指定的安全需求对软件进行形式化验证。我们认为这两个声明性断言的程序不变量和状态变化以及命令性断言,指定命令改变程序状态。我们将讨论如何推理方法可以扩展使用领域知识和实用的方法,防止语义分析器错误。
2021-03-04 cs.PL
Automated Verification of Integer Overflow
内存溢出是软件中错误的主要来源之一。验证系统通常假定用于各种整数操作的良好定义的底层语义,并且不显式地检查程序中的整数溢出。在本文中,我们提出了一个规格说明机制表示整数溢出。我们开发了一个自动化的程序验证过程中的整数溢出检查。我们已经实现了一个原型整数溢出检查器,并测试了它的基准组成的已经验证的程序(超过14k位)。我们已经在这些程序中发现了43个由于整数溢出而导致的错误。
2019-09-20 cs.PL
Compositional Verification of Heap-Manipulating Programs through Property-Guided Learning
自动分析和验证堆操作程序具有挑战性。对抗复杂性的一个关键是开发组合方法。例如,许多现有的堆操作程序的验证器需要用户提供的规范,在程序中的每个功能,以分解的验证问题。然而,这一要求往往阻碍用户应用这些工具。为了克服这个问题,我们建议自动学习堆相关的程序不变量的属性引导的方式为每个函数调用。不变量是根据测试执行过程中观察到的记忆图来学习的,并通过记忆图变异来改进。我们实现了我们的方法的原型,并将其与两个现有的程序验证。实验结果表明,我们的方法有效地提高了现有的验证器在自动验证复杂的堆操作程序与多个函数调用。
2019-08-27 cs.PL
Proceedings 5th Workshop on Horn Clauses for Verification and Synthesis
许多感兴趣的程序验证和综合问题可以直接使用Horn子句建模,CLP和CAV社区的许多最新进展都集中在有效地解决Horn子句提出的问题上。HCVS系列研讨会旨在汇集在约束/逻辑编程两个社区工作的研究人员(例如,ICLP和CP),程序验证(例如,CAV、TACAS和VMCAI)和自动演绎(例如,CADE,IJCAR),关于基于Horn子句的分析、验证和综合的主题。这些团体在不同的时期从不同的角度倡导关于核查和综合的霍恩条款,组织HCVS是为了促进互动和富有成效的经验交流和整合。
2018-09-12 cs.LO cs.PL cs.SE
Solvable Tuple Patterns and Their Applications to Program Verification
The University of Tokyo(东京大学);Tokyo University of Agriculture and Technology(东京农工大学);Tohoku University(东北大学)
提出可解元组模式(STP)和合取STP(CSTP),通过少量正样本高效推断列表状递归数据结构的不变量,并集成到CHC求解器中显著提升程序验证性能。
2026-05-26 cs.PL
A Programmer-Centric Approach to Program Verification in ATS
形式化规格说明在高质量软件的构造中得到了广泛的应用。然而,在正式规范和实际实现之间往往存在着巨大的差距。虽然已经有大量的工作在软件测试和验证,任务,以确保实现确实符合其规格仍然是不可避免的巨大困难。ATS是一种程序设计语言,它配备了一个高度表达的类型系统,允许程序员指定和实现,然后在语言本身中验证实现是否符合其规范。在本文中,我们主要是通过例子程序员为中心的风格的程序验证,强调要求程序员解释在一个文学的方式,为什么他或她的代码的作品。这是追求软件构造的坚实的一步,根据规范是可验证的正确的。
2012-03-27 cs.PL cs.SE
Scalable Probabilistic Program Verification via Typed Extended Decision Diagrams
RWTH Aachen University(亚琛工业大学);Cornell University(康奈尔大学);Radboud University(拉德堡德大学)
针对概率程序验证中弱前置期望表示爆炸问题,提出类型化扩展决策图(TEDD)表示和SMT剪枝方法,将可扩展性提升数个数量级。
2026-06-24 cs.PL
Automatic verification of heap-manipulating programs
研究了命令式程序设计语言中堆组合推理的理论基础。本文提出了一种新的组合符号记忆的概念及其相关性质。我们利用这些正式的基础,建立一个组合算法,产生广义堆,符号堆演算,其特征在于任意循环代码段的条款。由这个演算推断出的所有状态都精确地对应于原始程序的可达状态。我们建立在这个演算和纯二阶函数程序的执行推理之间的对应关系。
2019-06-26 cs.PL