Correctness of Sequential Monte Carlo Inference for Probabilistic Programming Languages
该研究针对概率编程语言中序贯蒙特卡罗(SMC)推断缺乏操作语义下正确性证明的问题,扩展PPL lambda演算加入显式重采样项,证明重采样位置不影响通用SMC推断的正确性,并形式化自举粒子滤波器,为SMC算法在PPL中的应用提供理论支撑。
2023-05-03 cs.PL
Type checking through unification
在本文中,我们描述了如何利用高阶统一的类型检查依赖类型的语言与元变量。文献通常将统一算法作为一个独立的组件,然而,需要检查定义的平等的条款,而类型检查引起了类型检查和统一之间的紧密相互作用。这种相互作用是现有依赖类型化程序设计语言的类型检查算法复杂性的主要来源。我们提出了一种算法,编码的类型检查问题完全统一的形式的约束,降低了类型检查代码的复杂性,利用高阶统一,这已经是许多依赖类型的语言的实现的一部分。
2016-09-30 cs.PL
Proving correctness of Timed Concurrent Constraint Programs
提出了一种用于时间并发约束程序正确性推理的时态逻辑。这种逻辑是基于模态,它允许人们指定一个过程产生什么作为对其环境输入的反应。这些模态提供了一个假设/承诺风格的规范,允许一个健全的和完整的组合公理化的反应行为的定时并发约束程序。
2002-08-28 cs.LO cs.PL
Program Repair by Stepwise Correctness Enhancement
相对正确性是一个程序的属性,相对于给定的规范,它比另一个程序更正确。传统的(绝对)正确性定义将候选程序分为两类(正确和不正确),而相对正确性将候选程序安排在更丰富的偏序结构上。在其他地方,我们讨论的影响,相对正确性的程序推导,程序验证。在本文中,我们讨论了程序测试的相对正确性的影响,具体地说,我们认为,当我们从一个程序中删除一个错误,我们应该测试新的程序相对正确的旧程序,而不是绝对正确。我们提出的分析参数,以支持我们的立场,以及一个小程序的形式,其故障被删除,在一个逐步的方式,其相对正确性上升,每个故障删除,直到我们获得一个正确的程序的经验参数。
2016-06-01 cs.DM cs.LO cs.PL
Automating the Diagram Method to Prove Correctness of Program Transformations
我们报告的自动化技术,以证明程序转换的正确性,在高阶程序演算,这可能允许递归让绑定,因为它们发生在功能程序设计语言。如果程序转换保持了程序的观察语义,那么它就是正确的。在我们的LRSX工具中,所谓的图方法是通过结合高阶元语言上的α重命名的统一、匹配和推理来自动化的,并且通过编码来自动化归纳证明到术语重写系统的终止问题中。我们解释的技术,我们说明了使用的工具,我们报告的实验。
2019-02-22 cs.LO cs.PL
Certifying C program correctness with respect to CompCert with VeriFast
VeriFast是一个强大的工具,用于验证使用符号执行的C程序的各种正确性属性。然而,VeriFast本身尚未得到验证。我们提出了一个概念验证扩展,为每个成功的验证单独运行生成一个正确性证书。此证书采用Coq脚本的形式,其中包含两个证明,当Coq成功检查时,就不再需要信任VeriFast本身的正确性。第一个证明了一个引理,该引理表达了程序相对于我们开发的一个大步操作语义的正确性,旨在反映VeriFast对C语言的解释。我们在Coq中将这种语义形式化为cbsem。这个引理通过Coq中的符号执行来证明,而Coq又通过将程序的导出AST转换为表示VeriFast本身执行的符号执行的Coq命题来实现。第二个证明了同一个C程序在CompCert的Clight大步语义方面的正确性。这个证明简单地将我们对cbsem关于CompCert Clight的可靠性的证明应用于第一个证明。
2021-10-21 cs.LO cs.PL
Correctness and completeness of logic programs
讨论了定子句逻辑程序的正确性和完备性的证明。我们提出了一种方法来证明完整性,而证明正确性,我们采用了一种方法,应该是众所周知的,但往往被忽视。此外,我们展示了如何证明的完整性和正确性的存在SLD树修剪,并指出,近似规范简化规范和证明。我们比较证明方法声明式诊断(算法调试),表明近似规范消除了后者的一个主要缺点。我们认为,我们的证明方法反映了程序的自然声明性思维,它们可以正式或非正式地用于日常编程。
2015-05-17 cs.LO cs.PL
Bridging the Gap between Programming Languages and Hardware Weak Memory Models
我们开发了一种新的中间弱内存模型IMM,作为将从具有弱内存一致性语义的并发程序设计语言到主流多核架构(例如POWER和ARM)的编译正确性证明模块化的一种方式。我们使用IMM来证明编译的正确性,从Kang等人的有前途的语义到POWER(从而修正和改进他们的结果)和ARMv7,以及最近修订的ARMv 8模型。我们的结果在Coq中是机械化的,据我们所知,这些是第一个机器验证的编译正确性结果,用于比x86-TSO更弱的模型。
2018-11-09 cs.PL
An Inductive Proof Method for Simulation-based Compiler Correctness
我们研究归纳的程序结构作为一种证明方法的基于双模拟的编译正确性。我们考虑一个一阶语言与相互递归的函数定义,系统调用,和一个环境语义。证明方法依赖于函数定义与互模拟的兼容性的推广。我们用归纳法证明了一种死代码消除形式的正确性。这是一个有趣的案例研究,因为转换从程序中删除了函数、变量和参数定义。虽然这样的转换需要修改的模拟在一个共同归纳的证明,归纳法处理他们自然。我们所有的结果都在Coq中形式化了。
2016-11-29 cs.PL
Traits for Correct-by-Construction Programming
我们证明,性状是一种自然的方式来支持正确的建设(CbC)在现有的程序设计语言在传统的事后验证(PhV)的存在。通过构造正确性,程序是随着内在保证满足的规范而递增地构造的。在没有专门工具支持的情况下使用CbC是复杂的,因为它需要一组固定粒度的细化规则,这些规则是程序设计语言之上的附加规则。在这项工作中,我们提出了TraitCbC,一个增量的程序建设过程,实现正确的基础上,通过使用性状的PhV建设。TraitCbC允许通过特征组合而不是细化规则来构建程序。它提供了一个编程指南,类似于CbC应该导致结构良好的程序,并允许灵活地重用已验证的程序构建块。我们正式介绍TraitCbC和证明我们的验证策略的合理性。此外,我们实现TraitCbC作为概念验证。
2022-04-12 cs.PL
Proving Correctness and Completeness of Normal Programs - a Declarative Approach
我们提倡使用声明性方法来证明逻辑程序的属性。完全正确性可以分为正确性、完整性和干净终止;后者包括非挣扎。只有干净的终止依赖于操作语义,特别是选择规则。我们展示了如何处理的正确性和完整性的声明方式,治疗程序只从逻辑的角度来看。这种方法中使用的规范是解释(或理论)。我们指出,规范的正确性可能不同于那些完整性,因为通常有答案,既不被认为是错误的,也不需要计算。给出了确定性程序正确性和完备性的证明方法,并将其推广到正规程序。对于正常的程序,我们使用3值完成语义;这是一个标准的语义对应于否定有限失败。证明方法仅采用经典的2值逻辑。我们使用的3值完成语义,这可能是单独的利益的2值表征。所提出的方法进行了比较与基于操作语义的方法。我们还采用这项工作的想法推广一个已知的方法证明终止正常程序。
2005-01-25 cs.LO cs.PL
On the Correctness of Pull-Tabbing
Pull-Tabbing是一种基于最近提出的图变换的函数逻辑计算的评估方法,它避免了做出会危及计算完整性的不可撤销的非确定性选择。与具有此属性的其他方法相比,它不需要预先克隆可能很大一部分的选择上下文。我们正式定义的拉标签变换,其特征在于类的程序的变换的目的,扩展这些程序中的计算,包括变换,并证明扩展计算的正确性。
2011-07-31 cs.PL
Towards the Future: Bring Program Correctness back to the focus
在形式语义是一个热门话题的早期,程序正确性曾经是计算机软件的主要关注点。但是,“正确”一词后来被可靠、稳健和值得信赖等取代,一个折衷的情况。这并不是因为正确性不再重要,而是因为人们发现没有办法在这个方向上取得成功。这种权衡导致软件工程师专注于技术和测试工具。软件工程的快速发展现在已经达到了一个高峰,程序员现在可以自由地工作,而不用太担心bug,因为bug是无法避免的。今天讨论程序正确性有意义吗?我们的答案是肯定的。现在是再次认真考虑正确性的时候了,在为时已晚之前,为未来做好准备。下一代计算机系统在语法(静态)和语义(动态)上都应该是正确的。第一作者的《OESPA:面向语义的编程理论》(2019)一书为语义研究开辟了新的方向。从理论上讲,基于OESPA,可以从程序文本中计算出程序语义,从而证明程序的正确性。但是,当程序规模较大时,语义计算和正确性证明无法手工完成。自动工具是必要的。本文的工作为开发所需的自动化工具奠定了基础,从而丰富了OESPA,使之更好地服务于未来的需要。为此,提出了条件语义谓词的概念。对OESPA中的语义函数、语义谓词、语义公式和语义演算等概念进行了重新表示。这种重新介绍是必要的,因为这本书是唯一的出版物语义演算迄今为止。新版本的语义演算说明了如何进行语义自动计算。
2022-03-29 cs.PL cs.SE
Correctness Witness Validation by Abstract Interpretation
本文提出一种新颖的抽象操作 unassume,通过将见证不变式纳入抽象程序状态以加速不动点收敛并提升精度,实现了通过抽象解释验证正确性见证,显著减少了多线程程序验证的 CPU 时间并能验证原本无法验证的属性。
2023-10-25 cs.PL
From Provable Correctness to Probabilistic Generation: A Comparative Review of Program Synthesis Paradigms
本文综述程序合成的五大核心范式,分析各方法的原理、系统与应用及关键权衡,梳理从符号到神经符号混合的演进脉络,指明可靠可扩展程序合成的未来方向。
2025-07-21 cs.PL
Correctness of Speculative Optimizations with Dynamic Deoptimization
高性能的动态语言实现大量使用推测性优化,以达到接近静态编译语言的速度。这些优化通常由实时编译器执行,该编译器在一组关于程序状态及其环境的假设下生成代码。在某些情况下,程序可以执行在不再有效的假设下编译的代码。然后,实现必须在运行中对程序进行去优化;这需要找到不依赖于无效假设的语义等效代码,将程序状态转换为目标代码所期望的状态,并转移控制。本文着眼于优化和去优化之间的相互作用,并表明,推理投机是令人惊讶的容易时,假设是明确的程序表示。这种见解是证明了编译器的中间表示,命名为\sourir,建模后的动态语言的高层次表示。传统的编译器优化,如常数折叠,死代码消除,函数内联被证明是正确的存在的假设。此外,本文还建立了特定于去优化的编译器转换的正确性:即无限制去优化,谓词提升和假设组合。
2017-11-15 cs.PL
On correctness of an n queens program
Thom Frühlynth提出了一个简短,优雅和有效的Prolog程序的n皇后问题。然而,该程序可能被视为相当棘手,人们可能不相信它的正确性。本文以声明的方式解释了程序,并证明了程序的正确性和完整性。规范和证明是声明性的,即它们从任何操作语义中抽象出来。该规范是近似的,不需要精确地描述程序的语义。尽管该程序的工作在非地面条款,这项工作采用了标准的语义,基于逻辑后果和Herbrand解释。本文的另一个目的是提出一个关于逻辑程序语义的精确声明推理的例子。
2020-07-17 cs.LO cs.PL cs.SE
Correctness Witnesses for Concurrent Programs: Bridging the Semantic Divide with Ghosts (Extended Version)
本文提出一种基于幽灵的并发程序正确性见证格式,使交错语义与线程模块化语义下的见证有效性一致,并在SV-COMP基准上验证了其可行性。
2024-11-25 cs.PL
babble: Learning Better Abstractions with E-Graphs and Anti-Unification
库学习通过从语料库中提取公共结构来压缩给定的程序语料库,从而将其转换为可重用的库函数。之前关于库学习的工作受到两个限制,这阻止了它扩展到更大,更复杂的输入。首先,它探索了太多对压缩无用的候选库函数。其次,它对输入中的句法变化不鲁棒。我们提出了图书馆学习模理论(LLMT),一个新的图书馆学习算法,另外作为输入的方程理论为一个给定的问题域。LLMT使用e-graph和等式饱和来表示等价模理论的程序空间,并使用一种新的e-graph反统一技术来更直接有效地发现语料库中的公共模式。我们在一个名为BABBLE的工具中实现了LLMT。我们的评估表明,BABBLE实现了更好的压缩数量级比最先进的。我们还提供了一个定性的评估表明,BABBLE学习可重用的功能,以前无法达到的输入库学习。
2022-12-08 cs.PL
Certifying C program correctness with respect to CH2O with VeriFast
本文提出一个概念验证扩展,为 VeriFast 的每次成功验证生成 Coq 证书,通过可靠性证明链将程序正确性归约到 CH2O 语义,从而消除对 VeriFast 本身的信任需求。
2023-08-29 cs.LO cs.PL
On correctness and completeness of an n queens program
Thom Frühlynth提出了一个简短,优雅和有效的Prolog程序的n皇后问题。然而,该程序可能会被视为相当棘手,人们可能不会相信它的正确性。本文以声明的方式解释了程序,并证明了程序的正确性和完整性。规范和证明是声明性的,即它们从任何操作语义中抽象出来。该规范是近似的,不需要精确地描述程序的语义。尽管该程序的工作在非地面条款,这项工作采用了标准的语义,基于逻辑后果和Herbrand解释。本文的另一个目的是提出一个关于逻辑程序语义的精确声明推理的例子。逻辑程序设计理论与实践(TPLP)
2021-08-18 cs.LO cs.PL cs.SE
Reducing Total Correctness to Partial Correctness by a Transformation of the Language Semantics
我们给出了一个语言参数的解决方案的问题,总的正确性,通过自动减少它的问题的部分正确性,在假设下,提供了一个表达式,其值随着每个程序步骤在一个良好的基础顺序减少。我们的方法假设,程序设计语言的语义是作为一个重写理论。我们实现了一个原型上的RMT工具,我们表明,它在实践中的一些例子。
2019-02-22 cs.LO cs.PL
Interactive Program Synthesis
从不完整的规范(例如输入输出示例)的程序合成已经得到普及,并找到了现实世界的应用,主要是由于其易于使用。由于该技术通常用于交互式环境,因此效率和正确性通常是基于此类技术的系统的关键用户期望。确保效率是具有挑战性的,因为程序合成算法的高度组合性质不适合面向用户的系统的1-2秒响应期望。满足正确性的期望也是困难的,因为提供的规范是不完整的,并且这些系统的用户通常不是程序员。在本文中,我们描述了如何利用交互性来开发高效的合成算法,以及减少认知负担,用户忍受试图确保系统产生所需的程序。我们沿着三个维度建立了一个正式的用户交互模型:增量算法,基于步骤的问题制定和基于反馈的意图细化。然后,我们说明了每一个这些形式的互动合成性能和正确性方面的一组现实世界的案例研究的有效性。
2017-03-10 cs.PL
Optimality in Goal-Dependent Analysis of Sharing
利用抽象解释理论对逻辑程序进行静态分析,面临正确性、最优性和精度问题。我们提出了一个框架,配备了两个统一运营商的向前统一(调用程序)和向后统一(从程序返回)的指称,目标相关的语义。后者通过匹配操作实现。我们的建议澄清和统一了许多不同的框架和思想的静态分析的逻辑编程在一个单一的,正式的设置。在抽象方面,我们专注于域共享的Jacobs和Langen,并提供最佳的正确近似的所有原始的语义算子,即投影,重命名,向前和向后统一。我们表明,抽象的统一运营商是严格更精确的比那些在文献中定义在同一个抽象域。在某些情况下,我们的运营商是更精确的比那些更复杂的领域,涉及线性和自由度。逻辑程序设计理论与实践(Theory and Practice of Logic Programming,TPLP)
2009-06-15 cs.LO cs.PL
An Empirical Study of Rational Tree Unification for miniKanren
St. Petersburg State University(圣彼得堡国立大学)
本文研究 miniKanren 中的有理树合一,给出定义、算法与性质证明,提出并基准评估多种启发式优化,同时分析其与传统合一算法共存的可能。
2025-10-04 cs.LO cs.PL
QbC: Quantum Correctness by Construction
本文提出QbC方法,通过前置/后置条件规范和健全完备的精化规则,从规范直接构造正确的量子while程序,并在惯用问题中验证其有效性,支持量子算法与软件的设计和分类。
2025-05-06 cs.LO cs.PL cs.SE
A Simple Correctness Proof for Magic Transformation
本文给出了幻变换正确性的一个简明证明。我们相信它可以提供一个有用的例子形式推理的逻辑程序。正确性属性涉及声明性语义。然而,证明涉及源程序的操作语义(LD解析)。它的简洁性是由于应用了适当的证明方法。
2010-12-10 cs.DB cs.LO cs.PL
A Unification Algorithm for GP 2 (Long Version)
图形程序设计语言GP 2允许非确定性地应用规则模式(或“属性化”规则)的集合。为了静态地分析程序冲突,用表达式标记的图被叠加以构造关键规则应用对。每一个叠加都包含一个方程组,其解代表不同的冲突。我们提出了一个基于规则的统一算法的GP表达式,是终止,声音和完整的。对于每个输入方程,该算法生成有限的替换集。合理性意味着这些替换中的每一个都求解了输入方程。由于GP标签是通过连接构造的列表,因此需要统一模结合性和单位律。这个问题,也被称为词统一,一般是无限的,但由于GP的规则模式语法和规则模式是左线性的假设而成为有限的。我们的统一算法是完整的,因为输入方程的每一个解都是生成集合中某些替换的实例。
2017-05-05 cs.LO cs.PL
Program Analysis with Prophecy and History Variables in the Nexis Compiler
National University of Singapore(新加坡国立大学);Massachusetts Institute of Technology(麻省理工学院)
研究提出用预言变量解决程序分析问题,通过特定语言指定变量,紧密耦合变量规范与操作语义,消除传统机制。给出预言和历史变量的验证实现,证明经典转换的正确性和最优性,是首批此类机器检查证明。
2026-07-28 cs.PL
Mechanized semantics
本讲座的目标是展示现代定理证明器--在本例中,Coq证明助手--如何用于机械化程序设计语言及其语义的规范,以及如何对单个程序和通用程序转换进行推理,如通常在编译器中发现的那样。所涵盖的主题包括:操作语义学(小步、大步、定义解释器);指称语义的简单形式;公理语义学和霍尔逻辑;验证条件的生成,以及对程序证明的应用;编译成虚拟机器码及其正确性证明;优化程序转换(死代码消除)及其正确性证明的示例。
2010-10-27 cs.PL
Proceedings Fifth International Workshop on Rewriting Techniques for Program Transformations and Evaluation
本卷包含2018年7月8日在英国牛津举行的第五届程序转换和评估重写技术国际研讨会(WPTE 2018)的正式会议记录,并与FLoC 2018和FSCD 2018相关联。WPTE的范围:重写技术对于研究程序转换、翻译和评估的正确性有很大的帮助,WPTE的目的是将研究程序转换、评估和基于操作的程序设计语言语义的研究人员聚集在一起,使用重写方法,以分享技术和最新发展,并交换想法,鼓励进一步激活这一领域的研究。WPTE范围内的主题包括程序转换,优化和翻译的正确性;证明终止,汇合和其他属性的程序转换;评估策略的正确性;程序的操作语义,基于操作的程序等效,如上下文等效和互模拟;关于转换优化能力和评估成本的推理成本模型;用于验证和定理证明目的的程序变换;具有不同形式主义的程序的翻译、模拟、等价和评估策略;用于将重写技术应用于特定程序设计语言中的程序的程序变换;用于程序反演和程序合成的程序变换;用于Haskell和重写的程序变换和评估。研究论文的选择:在研讨会上提出了六份研究论文,其中五份被接受为后续程序。每一份提交的材料都由计划委员会的三到四名成员分两到三轮进行审查,一轮用于研讨会介绍,最多两轮用于在后续程序中发表。该计划还包括Jean-Pierre Jouannaud(Polytec,Palaiseau,大巴黎,法国)关于图重写框架的邀请演讲;该演讲的摘要包含在本卷中。
2019-02-21 cs.PL
Formally Validating a Practical Verification Condition Generator (extended version)
一个程序验证器产生可靠的结果,只有当两个逻辑用于证明程序的正确性是健全的,程序验证器的实现本身是正确的。尽管形式上证明逻辑的可靠性是很常见的,但验证器的实现通常仍然未经验证。验证器实现中的错误可能会危及成功验证结果的可信度。由于程序验证器在实践中使用的是复杂的,不断发展的软件系统,它通常是不可行的,正式验证其实现。在本文中,我们提出了一种替代方法:我们验证成功运行的广泛使用的布吉验证器通过产生一个证书,证明所获得的验证结果的正确性。Boogie执行一系列复杂的程序翻译,然后最终生成一个验证条件,其有效性应该意味着输入程序的正确性。我们将展示如何证明三个布吉的核心转型阶段:消除循环控制流路径,(SSA样)的假设使用新的变量(被动化),并最终生成的验证条件的替代分配。类似的翻译被其他验证者采用。我们的实现在Isabelle中生成证书,基于Boogie语言的新颖形式化。
2021-05-29 cs.PL
Proving Liveness of Parameterized Programs
多线程程序的正确性通常要求它们满足活性属性。例如,程序可能要求没有线程缺少共享资源,或者所有线程最终都同意一个值。本文提出了一种方法来证明这样的活性性质举行。在这项工作中解决的两个特殊挑战是:(1)正确性论证可能依赖于系统的全局行为(例如,正确性论证可以要求所有线程共同地朝着“好的事情”前进,而不是一个线程前进而其它线程不干扰),以及(2)这样的程序通常被设计成由任何数量的线程执行,并且所期望的活跃度属性必须保持,而不管程序中活动的线程的数量如何。
2016-05-08 cs.LO cs.PL
jMT: Testing Correctness of Java Memory Models (Extended Version)
Carl von Ossietzky Universität Oldenburg(奥尔登堡卡尔·冯·奥西茨基大学)
jMT通过构建多执行语义来验证Java内存模型的正确性,支持对新提案的JMM进行程序级别的评估,并测试其与现有编译方案的兼容性。
2026-04-17 cs.PL
Foundational VeriFast: Pragmatic Certification of Verification Tool Results through Hinted Mirroring
KU Leuven(荷语天主教鲁汶大学)
通过提示镜像技术,VeriFast扩展为生成Rocq证明脚本,以验证Rust程序的正确性,提升其在安全关键领域的应用
2026-01-20 cs.PL
The Ghosts of Empires: Extracting Modularity from Interleaving-Based Proofs (Extended Version)
University of Freiburg(弗赖堡大学);LIX – CNRS – École Polytechnique(巴黎综合理工学院计算机科学与数学实验室)
本文提出了一种将基于交织的证明转换为线程模ularity证明的方法,通过合成鬼变量来抽象无关细节,生成紧凑且高效的正确性证明。
2026-02-26 cs.PL
Outcome Separation Logic: Local Reasoning for Correctness and Incorrectness with Computational Effects
本文提出结果分离逻辑(OSL),一种同时支持正确性与不正确性推理的程序逻辑,通过框架规则和新的三归结符号执行算法,实现对具有计算效应程序的局部推理,推进了分离逻辑的合成性。
2024-03-13 cs.LO cs.PL
Outcome Logic: A Unifying Foundation for Correctness and Incorrectness Reasoning
用于bug查找的程序逻辑(例如最近引入的不正确逻辑)将正确性和不正确性框定为需要不同逻辑基础的双重概念。在本文中,我们认为,一个统一的理论可以用于正确性和不正确性推理。我们提出了结果逻辑(OL),霍尔逻辑的一种新的推广,既monadic(捕捉计算效果)和monoidal(原因的结果和可达性)。OL表达真正的积极错误,同时保留正确性推理能力。为了正式的适用性OL的正确性和不正确性,我们证明了任何虚假的OL规范可以反驳OL本身。我们还使用我们的框架的原因在不确定性和概率程序的新类型的不正确。鉴于这些进展,我们主张OL作为一个新的基础理论的正确性和不正确性。
2023-03-10 cs.LO cs.PL
Trace-Relating Compiler Correctness and Secure Compilation
在最简单的形式中,编译器正确性被定义为将编译程序的跟踪集合包含到原始程序的跟踪集合中,这相当于保留所有跟踪属性。例如,这里的跟踪收集每次执行的外部可观察事件。然而,这个定义要求源语言和目标语言的踪迹集完全相同,而当语言相距很远或观察是细粒度的时,情况就不是这样了。为了克服这个问题,我们研究了一个广义的编译器的正确性定义,它使用源和目标的痕迹从潜在的不同的集合和连接的任意关系。我们开始了解什么保证这个广义的编译器正确性定义给我们的时候,实例化与非平凡的关系跟踪。当此跟踪关系不相等时,就不再可能保持源程序的跟踪属性不变。相反,我们提供了一个通用的表征的目标跟踪属性,确保正确编译一个程序,满足给定的源属性,和双重的源跟踪属性之一,需要显示,以获得一定的目标属性的编译代码。我们表明,这种观点编译器的正确性可以自然地占未定义的行为,资源枯竭,不同的源和目标值,侧通道,和各种抽象不匹配。最后,我们表明,同样的概括也适用于许多安全编译定义,其特征在于保护编译程序免受链接的对抗代码。
2020-02-23 cs.CR cs.PL
L0-Reasoning Bench: Evaluating Procedural Correctness in Language Models via Simple Program Execution
NVIDIA(英伟达)
本文提出 L0-Bench 基准,通过合成 Python 函数执行轨迹评估语言模型的过程正确性,发现模型随步数增加而退化,并探索测试时扩展以改进 level-0 推理。
2025-04-10 cs.CL cs.PL
Bridging Functional Correctness and Runtime Efficiency Gaps in LLM-Based Code Translation
Harbin Institute of Technology, Shenzhen, China(哈尔滨工业大学(深圳))
提出SwiftTrans框架,通过多视角探索和差异感知选择两阶段,利用并行上下文学习和差异比较,同时提升LLM代码翻译的正确性和运行时效率。
2026-06-17 cs.CL cs.PL
Future-based Static Analysis of Message Passing Programs
消息传递在工业上被广泛用于开发由多个分布式通信组件组成的程序。由于消息交换的并发性,开发功能正确的消息传递软件非常具有挑战性。尽管如此,许多安全关键应用程序依赖于消息传递范式,包括空中交通管制系统和紧急服务,这使得证明其正确性至关重要。我们专注于通过静态验证具体的Java代码的MPI程序的模块化验证。我们使用分离逻辑来推理局部正确性,并在mCRL 2使用的进程代数中定义通信协议的抽象。我们称这些抽象为未来,因为它们预测组件在程序执行期间如何交互。我们在期货和程序代码之间建立了一个可证明的联系,并通过模型检验来分析抽象期货,以证明全局正确性。最后,我们验证了一个领导选举协议,以证明我们的方法。
2016-06-20 cs.LO cs.PL
Learning to Guarantee Type Correctness in Code Generation through Type-Guided Program Synthesis
Peking University(北京大学);University of Michigan(密歇根大学);Shanghai Jiao Tong University(上海交通大学);Institute of Software, Chinese Academy of Sciences(中国科学院软件研究所);Tencent(腾讯)
TyFlow 通过内部化类型推理,提升代码生成的类型正确性与功能正确性。
2026-02-06 cs.AI cs.PL cs.SE
On completeness of logic programs
程序正确性(在命令式和函数式编程中)在逻辑编程中分为正确性和完整性。完整性意味着一个程序产生了它的规范所要求的所有答案。很少有人致力于对完备性的推理。本文给出了定规划完备性的几个充分条件。我们还研究了在SLD树的某些修剪情况下(例如,由于使用切割)保持完整性。我们将逻辑编程视为一种声明性的范例,尽可能地从任何操作语义中抽象出来。我们认为,所提出的方法是足够简单的应用,可能在一个非正式的水平,在实际的Prolog编程。我们指出近似规格的重要性。
2014-11-11 cs.LO cs.PL
From Traces To Proofs: Proving Concurrent Program Safe
调度的不确定性是并发程序正确性证明困难的主要原因。最近提出了一个强大的证明策略[6]来证明这些程序的正确性。该方法捕获数据流之间的依赖关系的指令的交错和无错误的线程执行。这些数据流依赖由归纳数据流图(iDFG)表示,简而言之,它表示引起所发现的数据流依赖的并发程序的一组执行。iDFG被进一步转化为替代有限自动机(AFA),以利用有效的自动机理论工具来解决这个问题。在本文中,我们给出了一个新颖的和有效的算法来直接构建AFA捕获的数据流依赖在并发程序执行。我们在ProofTraPar工具中实现了该算法,证明了有限状态循环程序在顺序一致内存模型下的正确性。我们的结果是encouranging和比较有利的现有国家的最先进的工具。
2016-04-28 cs.PL cs.SE
Proving Correctness of Imperative Programs by Linearizing Constrained Horn Clauses
本文提出了一种基于规范自动转换的命令式程序正确性验证方法。给定一个程序prog,我们考虑形式为$\{φ\}$ prog $\{ψ\}$的部分正确性规范,其中断言$φ$和$ψ$是由可能递归的Horn子句的集合Spec定义的谓词,其前提中具有线性算术(LA)约束(也称为约束Horn子句)。验证方法包括在构造一组PC的约束Horn子句,其可满足性意味着$\{φ\}$ prog $\{ψ\}$是有效的。我们强调了一些限制的国家的最先进的约束霍恩子句求解方法,这里称为LA求解方法,证明可满足性的条款,通过寻找线性算术解释的谓词。特别是,我们证明了存在一些规格,不能证明有效的任何这些LA解决方法。这些规范要求证明一组包含非线性子句(即前提中有多个原子的子句)的受约束Horn子句的PC的可满足性。然后,我们提出了一个转换,称为线性化,PC转换成一组线性条款(即条款,在其前提中最多一个原子)。我们表明,几个规格,不能被证明是有效的LA解决方法,可以被证明是有效的线性化后。我们还提出了一种策略,用于执行线性化在一个自动的方式,我们报告的一些实验结果,通过使用我们的方法的初步实施。
2015-07-21 cs.LO cs.PL
A Term-Rewriting Semantics for Imperative Style Programming
术语重写系统具有简单的语法和语义,并且便于正确性证明。然而,它们在工业界或学术界并不像命令式语言那样受欢迎。我们定义了一个术语重写为基础的抽象程序设计语言与一个命令式的风格和精确的语义,允许程序翻译成高效的命令式语言,以获得证明的正确性与高效的执行。这种语言的目的是促进翻译成正确的程序在命令式语言的赋值语句,迭代,递归,数组,指针和副作用。它也可以用来代替伪程序设计语言来指定算法。
2020-07-06 cs.PL cs.SE
An LLM-powered Natural-to-Robotic Language Translation Framework with Correctness Guarantees
School of Computer Science and Engineering(计算机科学与工程学院);Sun Yat-Sen University(中山大学)
本文提出NRTrans框架,通过机器人技能语言(RSL)及编译验证与反馈微调,为LLM生成的机器人控制程序提供正确性保证,实验证明其优于现有方法并提升轻量级LLM成功率。
2025-08-26 cs.AI cs.PL cs.RO
Automated Verification of Correctness for Masked Arithmetic Programs
本文针对特征为2的伽罗瓦域上掩码算术程序与原始密码算法的功能等价性问题,提出基于项重写并辅以随机测试和SMT求解的自动验证方法,实现为工具FISCHER,实验证明其有效、高效且可扩展,并发现EUROCRYPT 2017掩码实现中的新缺陷。
2023-05-26 cs.CR cs.PL cs.SE
Hoare-style Specifications as Correctness Conditions for Non-linearizable Concurrent Objects
设计可扩展的并发对象,它可以有效地用于多核处理器,往往需要放弃标准的规范技术,如线性化,有利于更宽松的一致性要求。然而,各种各样的替代正确性条件使得在特定情况下难以选择使用哪一个,并且在使用其行为通过不同标准指定的对象时难以组合它们。缺乏句法验证方法的大多数这些标准构成了挑战,在他们的系统采用和应用。在本文中,我们认为使用霍尔风格的程序逻辑作为一种替代和统一的方法规范和组合形式化验证的并发对象及其客户端程序的安全属性。通过一系列的案例研究,我们展示了如何现有的程序逻辑的并发性可以采用现成的捕捉重要的状态和历史不变,允许一个明确量化的环境线程的干扰,并提供直观和富有表现力的霍尔式规范的几个非线性并发对象,以前只指定通过专用的正确性标准。我们通过验证一些并发客户端的情况下,利用以前指定的并发对象,捕捉并发意识的线性化,静态和定量静态一致性等正确性条件的本质,说明我们的规范的充分性。本文中描述的所有示例都在Coq中进行了机械验证。
2016-07-21 cs.LO cs.PL
Correctness-Guaranteed Code Generation via Constrained Decoding
Netflix
本文提出一种基于上下文敏感解析器和动态解析器树的约束解码算法,通过sLua生成符合指定API的语义正确代码,并将保证扩展到运行时正确性,在roguelike游戏机制生成中得到验证。
2025-08-20 cs.LG cs.PL cs.SE
Type-Centric Kotlin Compiler Fuzzing: Preserving Test Program Correctness by Preserving Types
Kotlin是来自JetBrains的一种相对较新的程序设计语言:它的开发始于2010年,1.0版于2016年初完成。Kotlin编译器虽然缓慢而稳定地变得越来越成熟,但仍然会在更棘手的输入程序上不时崩溃,尤其是因为其功能及其交互的复杂性。这使得它成为模糊化的一个很好的目标,即使是基本形式的模糊化也可以发现大量的Kotlin编译器崩溃。然而,模糊化有一个问题,与崩溃的原因密切相关:生成一个随机的,非平凡的和语义有效的Kotlin程序是困难的。在本文中,我们谈论以类型为中心的枚举的形式,以类型为中心的编译器模糊,一种方法的灵感来自骨架程序枚举和基于生成和基于变异的模糊的组合,它解决了这个问题,专注于程序类型。在创建骨架程序之后,我们用合适类型的片段填充类型化的洞,这些片段通过生成来创建并通过语义感知突变来增强。我们在我们的Kotlin编译器模糊化框架中实现了这种方法,称为后端Bug测试(BBF),并进行了广泛的评估,不仅测试了我们方法的现实可行性,还将其与其他编译器模糊化技术进行了比较。结果表明,与其他模糊方法相比,我们的方法在生成语义有效的Kotlin程序方面要好得多,同时创建了更有趣的崩溃诱导输入。我们设法找到了50多个以前未知的编译器崩溃,其中18个在编译器团队分类后被认为是重要的。
2020-12-11 cs.PL cs.SE
Logic + control: On program construction and verification
本文提出了一个例子,形式化推理的语义Prolog程序的实际意义(SAT求解器的豪和国王)。该程序被视为一个带有附加控制的定子句逻辑程序。逻辑程序是通过逐步精化的方法构造的,并与其正确性和完整性证明携手并进。证明是声明性的--它们不引用任何操作语义。逻辑程序构造的每一步都遵循一种系统的方法来构造可证明正确和完整的程序。我们还证明了在最终的Prolog程序中保持了逻辑程序的正确性和完整性。此外,我们证明终止,发生检查自由和非挣扎。我们的例子展示了如何将处理“逻辑”和处理“控制”分开。大多数证明都可以在“逻辑”级别上完成,从任何操作语义中抽象出来。这个例子使用了近似的规格说明;它们在简化逻辑程序的推理中是至关重要的。它还表明,语义保持程序转换的范例可能是不够的。我们建议考虑转换保持正确性和完整性方面的近似规范。
2017-05-12 cs.LO cs.PL
Pleasant Imperative Program Proofs with GallinaC
提出GallinaC,将图灵完备命令式语言浅层嵌入Rocq证明助手的Gallina中,支持无界while循环,复用函数式证明策略,并通过链表反转证明验证可行性,正推进与Cminor的前向模拟。
2025-09-16 cs.LO cs.PL