Automated Lemma Synthesis in Symbolic-Heap Separation Logic
分离逻辑的符号堆片段已被积极开发和提倡用于验证计算机程序的存储器安全性质。目前,其最大的挑战之一是有效地证明包含归纳堆谓词的蕴涵。这些蕴涵通常是在验证操作复杂数据结构(如链表、树或图)的程序时生成的证明义务。为了帮助证明这样的蕴涵,本文介绍了一个引理合成框架,自动发现引理,作为尤里卡步骤的证明。数学归纳法和基于模板的约束求解是我们框架的两大支柱。为了导出给定蕴涵的支持引理,框架首先从蕴涵的堆结构中识别可能的引理模板。然后,它建立每个模板的变量之间的未知关系,并进行结构归纳证明,以产生这些关系的约束。最后求解约束条件,找出未知关系的实际定义,从而发现引理。我们已经将这个框架集成到一个原型证明器中,并在各种蕴涵基准上进行了实验。实验结果表明,我们的引理合成辅助证明器可以证明许多蕴涵,不能处理现有的技术。这个新提议为自动推理复杂的归纳堆谓词提供了更多的机会。
2017-11-08 cs.LO cs.PL
Model-Guided Synthesis of Inductive Lemmas for FOL with Least Fixpoints
递归定义的链接数据结构嵌入在一个基于指针的堆和他们的性质自然地表示在纯一阶逻辑与最少不动点定义(FO+lfp)与背景理论。这样的逻辑,不像纯粹的一阶逻辑,甚至不承认完整的程序。在本文中,我们采取了一种新的方法来综合归纳假设,以证明在这种逻辑的有效性。我们的想法是利用几种有限的一阶模型作为反例,捕捉公式的不可证明性和无效性,以指导归纳假设的搜索。我们实现我们的程序,并广泛地评估它们涉及堆数据结构的定理,需要归纳证明,并证明我们的方法的有效性。
2022-09-26 cs.LO cs.PL
Semantics-Guided Synthesis
本文提出了一种新的程序合成框架,称为语义引导合成(SemGuS),它允许用户提供语法和语义的语言中的结构。SemGuS接受递归定义的大步语义,这允许它用于指定和解决命令式程序设计语言上的合成问题,该命令式编程语言可能包含具有无限行为的循环。SemGuS的可定制性质还允许在非标准语义(例如抽象语义)上定义合成问题。除了SemGuS框架,我们开发了一种算法,用于解决SemGuS问题,能够合成程序和证明不可实现性,通过编码SemGuS问题作为一个证明搜索约束角子句:特别是,我们的方法是第一个,我们知道,可以证明不可实现性的合成问题,涉及的强制性程序与无界循环,在一个无限的语法搜索空间。我们在一个名为MESSY的工具中实现了该技术,并将其应用于两个SyGuS问题(即,在表达式上)和在命令式程序设计语言上的合成问题。
2020-11-11 cs.PL
Toward Neural-Network-Guided Program Synthesis and Verification
The University of Tokyo(东京大学);National Institute of Informatics(国立情报学研究所);SOKENDAI(综合研究大学院大学);University of Tsukuba(筑波大学);RIKEN AIP(理化学研究所革新智能统合研究中心)
我们提出了一个新的框架的程序和不变量的合成称为神经网络指导合成。我们首先表明,通过适当的设计和训练神经网络,我们可以从训练好的神经网络的权重和偏差中提取整数上的逻辑公式。基于这一思想,我们实现了一个从正例/反例和蕴涵约束合成公式的工具,并获得了令人满意的实验结果。我们还讨论了我们的合成方法的两个应用。一个是使用我们的工具,限定符发现的框架ICE学习为基础的CHC解决,这反过来又可以应用于程序验证和归纳不变的合成。另一个应用是一个新的程序开发框架,称为基于甲骨文的编程,这是一个神经网络引导的变化Solar-Lezama的程序合成的草图。
2021-08-25 cs.LG cs.PL
Towards Proof Synthesis Guided by Neural Machine Translation for Intuitionistic Propositional Logic
IBM Research -- Tokyo(IBM研究院(东京));Kyoto University(京都大学)
受深度神经网络(DNN)在机器学习中的最新发展的启发,我们探索了它们在PL相关主题中的应用。本文是实现这一目标的第一步;我们提出了一种无否定命题逻辑的证明合成方法,其中我们使用DNN来获得证明搜索的指南。这个想法是把证明综合问题看作是从命题到其证明的转换。我们训练seq 2seq,这是神经机器翻译中的一个流行网络,因此它生成一个编码为给定命题的$λ$ -项的证明。我们实现了整个框架,并根据经验观察到,生成的证明项在AST的树编辑距离方面接近于正确的证明。这一观察结果证明了使用经过训练的seq 2seq模型的输出作为证据搜索的指导是合理的。
2017-06-20 cs.AI cs.LO cs.PL
Proving Unrealizability for Syntax-Guided Synthesis
我们考虑自动建立给定的语法引导合成(SyGuS)问题是不可实现的(即,没有解决办法)。现有的技术有相当有限的能力来建立一般SyGuS实例中的语法描述的搜索空间包含无限多的程序的不可实现性。通过将综合问题的文法G编码为一个非确定性程序P_G,我们将不可实现性问题归结为可达性问题,使得如果一个标准的程序分析工具可以确定P_G中的某个断言总是成立,那么综合问题就是不可实现的。我们的方法可以用于增强任何现有的SyGus工具,以便它可以确定成功合成的程序q相对于某些语法成本是最优的-例如,q具有最少可能的if-then-else运算符。使用已知的技术,语法G可以被自动变换以精确地生成具有比q更低的成本的所有程序--例如,更少的条件表达式。我们的算法,然后可以应用到表明,由此产生的综合问题是不可实现的。我们在一个名为NOPE的工具中实现了所提出的技术。NOPE可以证明现有线性整数算术SyGus基准测试的59/134种变体的不可实现性,而所有现有的SyGus求解器都缺乏证明这些基准测试不可实现的能力,并且在它们上超时。
2019-07-23 cs.PL
Optimizing Regular Expressions via Rewrite-Guided Synthesis
正则表达式在现代系统中无处不在。许多现实世界中的正则表达式是低效的,有时候它们很容易受到基于复杂性的攻击,虽然很多研究都集中在检测低效的正则表达式或在硬件级别加速正则表达式匹配,但我们研究了自动转换正则表达式以消除低效。我们把这个问题归结为一般的表达式优化,这是一个重要的任务,在各种领域甚至超越了编译器,例如,具有成本函数的语法引导合成(SyGuS)可用于此目的,但通过候选表达式的大空间的有序枚举可能过于昂贵。等式饱和是一种替代方法,它允许有效地构造和维护重写规则生成的表达式等价类,但该过程可能不会达到饱和,这意味着无法确认全局最小值。我们提出了一种新的方法,称为重写引导合成(ReGiS),其中一个独特的相互作用之间的SyGuS和平等饱和的重写有助于克服这些问题,从而在一个有效的,可扩展的框架表达式优化。
2022-09-29 cs.PL
Specification-Guided Component-Based Synthesis from Effectful Libraries
基于编译器的合成寻求使用一组库提供的API来构建程序。通常,这些API具有影响,这使得推理潜在合成候选者的正确性具有挑战性。这是因为由有效的库过程对全局状态所做的更改会影响它们如何组合在一起,从而产生难以处理的大搜索空间,这会混淆典型的枚举合成技术。然而,如果这些效应的性质作为其规格的一部分被暴露,则可以使用演绎综合方法来帮助指导对组件的搜索。在本文中,我们提出了一个新的规范指导的综合过程,使用霍尔风格的前,后条件来表达潜在的库组件候选人的细粒度的影响,以驱动一个双向的综合搜索策略。该过程在前向搜索过程与后向搜索机制之间交替,前向搜索过程寻求在给定现有上下文的情况下构建更大的术语,但是前向搜索过程不知道实际目标,后向搜索机制寻求与期望目标一致的术语,但是后向搜索机制不知道这些术语必须从其合成的上下文。为了进一步提高效率和可扩展性,我们将冲突驱动的学习过程集成到合成算法中,该合成算法提供了先前遇到的不成功的搜索路径的语义表征,用于修剪可能的候选人的空间,作为合成的进行。我们已经实现了我们的想法,在一个名为Cobalt的工具,并证明了它的有效性上的一些具有挑战性的合成问题,定义在OCaml库配备有效的规范。
2022-09-06 cs.PL
RbSyn: Type- and Effect-Guided Program Synthesis
近年来,研究人员已经探索了基于组件的合成,其目的是通过组合对现有API的调用来自动构建程序。然而,先前的工作没有考虑具有副作用的方法的有效合成,例如,更新数据库的Web应用程序方法。在本文中,我们介绍了RbSyn,一种新的类型和效果指导的Ruby合成工具。RbSyn合成目标被指定为目标方法的类型和它必须通过的一系列测试用例。RbSyn的工作原理是递归地生成良好类型的候选方法体,其写效果与测试用例断言的读效果相匹配。在找到一组分别满足每个测试的候选代码后,RbSyn合成一个解决方案,该解决方案在适当的条件下分支执行正确的候选代码。我们正式的核心,面向对象的语言$λ_{syn}$的RbSyn和描述如何在我们的Ruby实现的模型的关键思想是按比例放大。我们在19个基准测试中评估了RbSyn,其中12个来自流行的开源Ruby应用程序。我们发现RbSyn为所有基准测试合成正确的解决方案,其中15个基准测试在9秒内合成,而最慢的基准测试需要83秒。使用观察到的读取来指导合成是有效的:单独使用类型指导在12个应用程序基准测试中有10个超时。我们还发现,使用不太精确的效果注释会导致合成性能变差。总之,我们相信类型和效果引导的合成是从测试用例合成有效方法的重要一步。
2021-04-08 cs.PL
Model Repair Revamped: On the Automated Synthesis of Markov Chains
本文概述了两种方法|基于反例引导的抽象精化(CEGAR)和反例引导的归纳综合(CEGIS),分别应用于有限状态概率模型和程序的自动综合。我们的CEGAR方法迭代分区的设计空间从这个空间的抽象开始,并通过一个轻量级的验证结果分析细化。CEGIS技术利用关键子系统作为反例来修剪所有在该输入上行为不正确的程序。我们展示了这些综合技术的适用性,概率方案的草图,POMDPs的控制器合成,和软件产品线。
2021-05-27 cs.PL
Exact and Approximate Methods for Proving Unrealizability of Syntax-Guided Synthesis Problems
我们考虑自动建立给定的语法引导合成(SyGuS)问题是不可实现的(即,没有解决办法)。我们制定的问题,证明一个SyGuS的问题是不可实现的一组有限的例子之一,解决一组方程:解决方案产生一个overapproximation的一组可能的输出,任何项在搜索空间可以产生的给定的例子。如果没有一个可能的输出与所有的例子一致,我们的技术已经证明了给定的SyGuS问题是不可实现的。然后,我们提出了一个算法,精确求解的方程组,导致SyGuS问题的线性整数算术(LIA)和LIA与条件(CLIA),从而表明,LIA和CLIA SyGuS问题超过100个例子是可判定的。我们在一个名为Nay的工具中实现了所提出的技术和算法。Nay可以证明70/132现有SyGuS基准测试的不可实现性,其运行时间与最先进的工具Nope相当。此外,Nay可以解决Nope无法解决的11个基准。
2020-04-02 cs.PL
Just-in-Time Learning for Bottom-Up Enumerative Synthesis
程序合成中的一个关键挑战是合成器必须探索的搜索空间的天文数字大小。为了应对这一挑战,最近的工作提出了使用学习的概率模型来指导合成。然而,对于没有高质量训练数据可用的问题域,获得这样的模型可能是不可行的。在这项工作中,我们介绍了一种替代方法,引导程序合成:而不是提前训练模型,我们展示了如何引导一个只是在时间,在合成过程中,从沿途遇到的部分解决方案的学习。为了充分利用该模型,我们还提出了一个新的程序枚举算法,我们称之为引导自自底向上的【形】的搜索,它扩展了有效的自自底向上的【形】的搜索与概率模型的指导。我们在一个名为Probe的工具中实现了这种方法,该工具针对流行的语法指导合成(SyGuS)格式中的问题。我们从文献中的基准评估探针,并表明,它实现了显着的性能增益,无论是在无指导的自自底向上的【形】的搜索和一个国家的最先进的概率引导合成器,这已经训练了现有的解决方案的语料库。此外,我们表明,这些性能的提高并不以解决方案的质量为代价:由探针产生的程序只是稍微比最短的解决方案更冗长,并没有执行不必要的情况下分裂。
2020-10-16 cs.PL
Grammar Filtering For Syntax-Guided Synthesis
George School(乔治学校);Yale University(耶鲁大学);Deerfield Academy(迪尔菲尔德学院)
PBE(Programming-by-Example)是一种综合范式,允许用户通过简单地提供输入输出示例来生成函数。虽然是一个很有前途的交互范例,但合成对于实时交互和更广泛的采用来说仍然太慢。PBE合成的现有方法已经使用了自动推理工具,例如SMT求解器,以及应用机器学习技术的工作。在其核心,自动推理方法依赖于程序设计语言的高度领域特定的知识。另一方面,机器学习方法利用这样的事实,即当使用程序代码时,可以生成任意大的训练数据集。在这项工作中,我们提出了一个系统,使用机器学习与自动推理技术,以解决指导合成(SyGuS)风格的PBE问题。通过用神经网络对SyGuS PBE问题进行预处理,我们可以使用数据驱动的方法来减少搜索空间的大小,然后允许基于自动推理的求解器更快地通过分析找到解决方案。我们的系统能够在现有的SyGuS PBE合成工具上运行,将2019年SyGuS竞赛的PBE Strings曲目获胜者的运行时间减少了47.65%,优于所有竞争工具。
2020-02-07 cs.LG cs.PL stat.ML
Automated Transpilation of Imperative to Functional Code using Neural-Guided Program Synthesis (Extended Version)
虽然许多主流语言(如Java、Python和C#)越来越多地采用函数式API来简化编程并提高并行化/性能,但没有有效的技术可以用于使用这些API将现有的命令式代码自动转换为函数式变体。针对这一问题,本文提出了一种基于归纳程序合成的编译方法,以实现现有代码的现代化。我们的方法是基于这样的观察,即绝大多数的源/目标程序在此设置满足一个假设,我们称之为跟踪兼容性:不仅程序共享语法相同的低级别的表达式,但这些表达式也采取相同的值在相应的执行轨迹。我们的方法利用这一观察结果来设计一种新的神经指导合成算法,该算法(1)使用一种称为同源语法网络(CGN)的新型神经架构,(2)利用一种concolic执行形式来基于计算过程中出现的中间值修剪部分程序。我们已经在一个名为NGST 2的工具中实现了我们的方法,并使用它将命令式Java和Python代码转换为分别使用Stream和functools API的函数变体。我们的实验表明,NGST 2显着优于几个基线,我们提出的神经架构和修剪技术是实现良好的结果至关重要。
2022-03-18 cs.PL
LLM-Guided Compositional Program Synthesis
针对大语言模型解决示例编程任务时易不可预测失败的问题,提出LLM引导的组合式程序合成方法,通过LLM分解并求解子任务实现失败恢复,可解决自反思方法无法处理的难例。
2025-03-12 cs.PL cs.SE
Trace-Guided Synthesis of Effectful Test Generators
Purdue University(普渡大学);Snowflake(雪松)
本文提出利用轨迹引导合成效果测试生成器,通过捕捉效果操作的下近似行为,提升测试效率,实验表明其优于默认策略并可与高级手写方案竞争。
2026-04-06 cs.PL
Gradient Descent over Metagrammars for Syntax-Guided Synthesis
UC Berkeley(加州大学伯克利分校)
语法引导的合成算法的性能高度依赖于提供良好的语法模板或语法。这种模板的提供通常留给用户手动完成,尽管在缺少这种语法的情况下,最先进的求解器将提供它们自己的默认语法,这取决于要被合成的目标程序的签名。在这项工作中,我们推测这种默认语法可以大大改善。我们建立了一套规则,或元文法,用于构造语法,并对这些元文法执行梯度下降,旨在找到一个元文法,解决更多的基准和平均更快。我们所得到的元语法使CVC 4能够在300秒的超时内解决比默认语法多26%的基准测试,并且元语法从数十个基准测试中学习到100个基准测试的性能。
2020-07-16 cs.AI cs.LG cs.PL
Neural-Guided Deductive Search for Real-Time Program Synthesis from Examples
Georgia Tech(佐治亚理工学院);Microsoft Research India(微软研究院印度);Microsoft Research Redmond(微软研究院雷德蒙德)
从少量的输入输出示例中合成用户预期的程序是一个具有挑战性的问题,有几个重要的应用程序,如电子表格操作,数据处理和代码重构。现有的合成系统要么完全依赖于大量手工设计的演绎逻辑技术,要么依赖于需要大量数据的纯统计模型,并且通常无法在具有挑战性的基准上提供实时的【形】合成。在这项工作中,我们提出了神经引导演绎搜索(NGDS),一种混合合成技术,结合了最好的符号逻辑技术和统计模型。因此,它生成的程序通过构造满足所提供的规范,并在看不见的示例上很好地泛化,类似于数据驱动系统。我们的技术有效地利用了演绎搜索框架,以减少学习问题的神经组件到一个简单的监督学习设置。此外,这使我们能够在有限的真实世界数据上进行训练,并仍然利用强大的递归神经网络编码器。我们证明了我们的方法的有效性,通过对真实世界的客户场景进行评估,通过合成准确的程序,与最先进的系统相比,速度高达12倍。
2018-09-09 cs.AI cs.LG cs.PL
FPGA Technology Mapping Using Sketch-Guided Program Synthesis
针对现有FPGA技术映射工具依赖手写规则、易出错且遗漏映射机会的问题,提出基于草图引导程序综合的Lakeroad方法,通过架构无关草图模板和HDL语义提取实现更优映射覆盖与正确性保证,性能显著优于商用及开源工具。
2024-01-29 cs.AR 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
Duplicate-sensitivity Guided Transformation Synthesis for DBMS Correctness Bug Detection
数据库管理系统(DBMS)在从移动应用程序到网上银行的现代软件中发挥着核心作用。DBMS应该为所有应用程序提供正确的数据是至关重要的。当DBMS返回不正确的数据时,就会触发正确性错误。目前的生产级数据库管理系统仍然遭受不足的测试,由于有限的手写测试用例。最近几个作品提出了自动生成许多测试用例的查询转换,一个过程中产生一个等价的查询对和测试的DBMS,通过检查系统是否返回相同的结果集的两个查询。然而,它们仍然严重依赖于手工工作来提供转换,这在很大程度上限制了它们对有效输入查询空间的探索。本文介绍了重复灵敏度指导的变换合成,自动发现新的转换,首先合成许多候选人,然后过滤不等价的。我们的自动合成是通过变异的查询,同时保持其重复的敏感性,这是查询等价的必要条件。在候选合成之后,我们使用查询等价检查器来保持与给定查询等价的突变查询。此外,我们已经实现了我们的想法在一个工具Eqsql,并使用它来测试生产级DBMS。在两个月内,我们在MySQL、TiDB和CynosDB中总共检测到30个新确认的独特错误。
2021-07-08 cs.DB cs.PL cs.SE
Scaling Program Synthesis Based Technology Mapping with Equality Saturation
本文提出Churchroad技术映射器,将等价饱和与程序综合工具结合,解决FPGA映射中草图编写困难及SMT求解器乘法处理弱的问题,可处理更大更复杂的设计且无需用户提供草图。
2024-11-19 cs.AR cs.PL
LLM-Guided Strategy Synthesis for Scalable Equality Saturation
Peking University(北京大学);School of Integrated Circuits(集成电路学院)
本文提出EggMind框架,通过领域特定语言EqSatL和LLM引导的代理工作流,高效合成可重用的等式饱和策略,提升资源质量平衡,减少成本和内存消耗。
2026-04-19 cs.AI cs.MA cs.PL
Program Synthesis Through Reinforcement Learning Guided Tree Search
Princeton University(普林斯顿大学)
程序合成是根据提供的规范生成程序的任务。传统上,这被程序设计语言(PL)社区视为搜索问题,最近被机器学习社区视为监督学习问题。在这里,我们提出了第三种方法,将给定程序的合成任务表示为可通过强化学习(RL)求解的马尔可夫决策过程。从部分程序的状态的观察,我们试图找到一个程序,是最佳的奖励度量对程序和状态。我们在RISC-V汇编语言的一个子集上实例化了这种方法,该语言操作于浮点数,作为PL社区基于搜索的技术的优化,我们将RL与优先级搜索树相结合。我们评估这种实例化,并证明了我们的组合方法的有效性相比,各种基线,包括纯RL消融和最先进的马尔可夫链蒙特卡罗搜索方法在这项任务上。
2018-06-08 cs.AI cs.LG cs.NE