Translating Recursive Probabilistic Programs to Factor Graph Grammars
University of Notre Dame(圣母大学);Indiana University(印第安纳大学)
对于概率程序来说,使用条件句来表达模型中的替代子结构,使用循环(递归)来表达模型中的重复子结构是很自然的。因此,概率程序与条件和递归激发了人们对有效和一般推理的兴趣。因子图语法(FGG)生成一组因子图,这些因子图不需要全部被枚举以执行推理。我们提供了从具有条件和递归的一阶概率程序到FGG的保留语义的翻译。
2020-10-22 cs.LG cs.PL
Synthesizing Program-Specific Static Analyses
设计一个静态分析通常是一项实质性的工作,需要在程序分析和程序分析领域的大量专业知识,以及大量的开发资源。因此,大多数程序分析都以普遍感兴趣的属性为目标(例如,不存在空指针解引用)或几乎如此(例如,死锁自由)。然而,许多可以从静态检查中受益的有趣的程序属性是特定于单个程序的,或者有时是特定于使用某个库的程序的。将程序分析和验证专家投入到这些问题中是不切实际的。我们建议,而不是工作的程序分析的基于实例的合成在很好理解的领域,如类型限定符系统和效果系统。这些系统阻止的问题类别背后的动态行为对应于缺乏静态分析专业知识的开发人员可以容易地提供的示例(数据流路径或堆栈跟踪)。
2018-10-15 cs.PL
Synthesizing Formal Semantics from Executable Interpreters
本文提出利用文法和黑盒解释器,通过 CEGIS 将 CHC 语义综合分解为 SyGuS 表达式问题,并在 14 个解释器上验证,还发现并修复了正则表达式语义不一致。
2024-09-06 cs.PL
Inferring Input Grammars from Dynamic Control Flow
程序的特征在于其输入模型,并且形式化输入模型可以用于不同的领域,包括脆弱性分析、逆向工程、模糊和软件测试、克隆检测和重构。不幸的是,典型程序的输入模型通常不可用或过时。虽然存在可以挖掘程序输入的语法结构的算法,但它们要么产生笨拙和难以理解的语法,要么需要针对特定解析模式的语法分析。在本文中,我们提出了一个通用的算法,需要一个程序和一个小的样本输入,并自动推断出一个可读的上下文无关文法捕捉输入语言的程序。我们推断的句法输入结构,只有通过观察在不同位置的输入解析器的输入字符的访问。这适用于所有基于程序堆栈的递归下降输入解析器,包括PEG和解析器组合子,并且可以完全不使用程序特定的语法。我们的Mimid原型为各种评估主题生成了准确可读的语法,包括expr、URLparse和microJSON。
2019-12-12 cs.PL cs.SE
Pika parsing: reformulating packrat parsing as a dynamic programming algorithm solves the left recursion and error recovery problems
递归下降分析器是由一组相互递归的函数构建的,其中每个函数直接实现文法的一个非终结符。packrat解析器使用记忆化来降低递归下降解析的时间复杂度,从输入长度的指数到线性。递归下降解析器编写起来非常简单,但有两个显著的问题:(i)左递归语法导致解析器陷入无限递归,以及(ii)在语法错误后很难或不可能最佳地恢复解析状态并继续解析。这两个问题都被pika解析器解决了,pika解析器是packrat解析的一种新的重新表述,它是一种动态规划算法,需要反向解析输入:自下而上和从右到左,而不是自上而下和从左到右。这种反向的解析顺序使pika解析器能够处理使用直接或间接左递归来实现左结合性的语法,简化语法编写,并且还能够从语法错误中进行最佳恢复,这是IDE和编译器的关键属性。Pika解析将Packrat解析的线性时间性能特性保持为输入长度的函数。pika解析器针对广泛使用的Parboiled2和ANTLR4解析库进行了基准测试。对于表达式语法,pika解析器的性能明显优于其他解析器,尽管对于实现Java语言规范的复杂语法,每个输入字符都会产生很大的恒定性能影响。因此,如果性能很重要,那么pika解析最好应用于简单到中等大小的语法,或者非常大的输入,如果其他解析替代方案在输入的长度上没有线性扩展。对优先级、结合性和左递归提出了一些新的见解。
2020-07-07 cs.PL
Program Language Translation Using a Grammar-Driven Tree-to-Tree Model
Harvey Mudd College(哈维穆德学院)
在程序设计语言之间进行翻译的任务与翻译自然语言的挑战不同之处在于,程序设计语言是用一组严格得多的结构和语法规则来设计的。以前的工作已经使用了树到树的编码器/解码器模型,以在翻译期间利用程序的固有树结构。然而,神经解码器默认不利用目标语言的已知语法规则。在本文中,我们描述了一个树解码器,利用知识的语言的语法规则,专门生成语法正确的程序。我们发现,这种基于语法的树到树模型优于最先进的树到树模型在两种程序设计语言之间的翻译先前使用的合成任务。
2018-07-04 cs.LG cs.PL stat.ML
Neural Attribute Machines for Program Generation
University of Wisconsin(威斯康星大学);Rice University(莱斯大学);GrammaTech, Inc.(GrammaTech公司)
递归神经网络在生成具有复杂结构的序列方面取得了显着的成功,这要归功于包括更丰富的输入嵌入和消失梯度的治愈在内的进步。尽管只接受了来自已知语法的序列的训练,他们仍然很难学习语法的规则和约束。神经属性机(NAM)配备有表示底层语法的逻辑机,其用于通过(i)增加输入序列和(ii)优化定制损失函数来向神经机教导约束。与传统的RNN不同,NAM暴露于语法以及来自语法语言的样本。在生成过程中,NAM对底层语法约束的违反比仅在语法语言样本上训练的RNN少得多。
2021-10-26 cs.AI cs.PL
Synthesizing Machine Learning Programs with PAC Guarantees via Statistical Sketching
University of Pennsylvania(宾夕法尼亚大学)
我们研究的问题,合成程序,包括机器学习组件,如深度神经网络(DNN)。我们专注于统计属性,这些属性预计将以高概率保持-例如,图像分类模型以高概率正确地识别图像中的人。我们提出了新的算法,利用统计学习理论的思想,提供统计可靠性的保证,素描和合成这样的程序。我们评估我们的方法合成列表处理程序,包括DNN组件用于处理图像输入,以及图像分类和精准医学的案例研究。我们的研究结果表明,我们的方法可以用来合成程序的概率保证。
2021-10-11 cs.LG cs.PL
V-Star: Learning Visibly Pushdown Grammars from Program Inputs
本文提出 V-Star,通过主动学习可见下推自动机并改造 L-Star,从程序样本中推断嵌套结构,实现对 JSON、XML 等实用语法的精确高效学习。
2024-04-05 cs.FL cs.PL
Grammar Repair with Examples and Tree Automata: Extended Version
National University of Singapore(新加坡国立大学)
本研究提出基于示例和树自动机的语法修复方法,通过构建自动机解决语法歧义,提升解析器生成的准确性与实用性。
2026-02-20 cs.PL
Synthesizing Functional Reactive Programs
函数式反应式编程(FRP)是一种简化反应式程序构造的范例。有许多库实现了FRP的具体化,使用了抽象,如Application,Monads和Arrows。然而,找到一个好的控制流,正确地管理状态并在正确的时间切换行为,仍然是开发人员面临的一个重大挑战。一个有吸引力的替代方案是指定行为而不是编程,最近开发的逻辑:时间流逻辑(TSL)使之成为可能。然而,它还没有被探索到目前为止,如何控制流模型(CFM),从TSL规范合成,可以变成可执行代码,是与FRP上的库兼容。我们弥合这一差距,表明CFMs确实是一个合适的形式主义变成应用,一元,箭头FRP。我们证明了我们的翻译在现实世界的厨房定时器应用程序,我们翻译到桌面应用程序使用箭头化FRP库Yampa,一个Web应用程序使用的一元三便士GUI库,并使用应用硬件描述语言ClaSH硬件的有效性。
2019-05-23 cs.PL
Data types as a more ergonomic frontend for Grammar-Guided Genetic Programming
Faculdade de Ciências da Universidade de Lisboa(里斯本大学理学院);Carnegie Mellon University(卡内基梅隆大学);Instituto de Medicina Molecular(分子医学研究所)
遗传编程(GP)是一种探试法,可以应用于许多机器学习、优化和工程问题。特别是在软件工程中,它被广泛用于测试用例生成、程序合成和软件改进。语法引导的遗传编程(GGGP)方法允许用户细化有效的程序解决方案的域。巴科斯范式是GGGP中描述上下文无关文法(CFG)的最流行的接口。BNF及其衍生物的缺点是使程序的语法语言和目标语言交错。我们建议将语法作为内部特定领域语言嵌入到框架的宿主语言中。这种方法具有与BNF和EBNF相同的表达能力,同时使用宿主语言类型系统来利用所有现有的工具:链接器,格式化程序,类型检查器,自动完成和遗留代码支持。这些工具在一般的软件设计中具有实用性,特别是GP系统。我们还提出了元处理程序,用户定义的树生成系统的覆盖。这种技术扩展了我们的面向对象的编码与更多的实用性和表达能力比现有的CFG方法,实现了相同的属性文法的表达能力,但没有语法与目标语言的二重性。此外,我们证明了这种方法是可行的,并展示了一个Python实现示例作为证明。我们还比较了我们的方法对文本BNF表示w.r.t.表现力和人体工程学。这些优势并不以性能为代价,正如我们对PonyGE 2示例实现的5个基准的经验评估所示。我们的结论是,我们的方法具有更好的人体工程学与相同的表达能力和性能的文本BNF为基础的语法编码。
2022-10-10 cs.LG cs.NE cs.PL
Sample-Free Learning of Input Grammars for Comprehensive Software Fuzzing
如果知道输入语言,为程序生成有效的测试输入就容易得多。我们提出的第一个成功的技术,给定一个程序P没有任何输入样本或模型,学习一个输入语法,表示语法有效的输入P -语法,然后可以用于高效的测试生成P。为此,我们引入了一个测试生成器,针对输入解析器,系统地探索解析的替代方案的基础上动态跟踪的约束,由此产生的输入进入语法学习器产生的语法,然后可以用于模糊。在我们对JSON、URL或Mathexpr等主题的评估中,我们的PYGMALION原型只花了几分钟就推断出语法并生成了数千个有效的高质量输入。
2018-10-18 cs.PL cs.SE
Active Learning of Input Grammars
了解程序输入的精确格式是系统测试的必要前提。给定一个程序和一小组样本输入,我们(1)跟踪输入的数据流,将共享相同数据流的输入片段聚集到词法和语法实体中;(2)根据相关的变量和函数标识符为这些实体分配名称;(3)通过成员查询系统地概括产生式规则。因此,我们只需要一个最小的样本输入集,以获得人类可读的上下文无关文法,反映有效的输入结构。在我们对URL、电子表格或配置文件等输入的评估中,我们的AUTOCast原型获得了准确且可读性很强的输入语法,并且可以直接输入到测试生成器中进行全面的自动化测试。
2017-08-29 cs.FL cs.PL
Synthesizing Invariants for Polynomial Programs by Semidefinite Programming
本文提出两种基于半定规划的新算法(Cluster和Mask),分别用于多项式程序不变量综合中的强和弱问题,平衡完备性与效率。
2024-09-19 cs.PL
Parsing Transformative LR(1) Languages
我们认为,作为一种手段,使程序设计语言更灵活和强大的分析算法,其中分析器可以自由地修改语法,同时分析。我们特别感兴趣的是,在一个修改的规范LR(1)分析算法,在减少某些产品后,我们检查到目前为止看到的源句子,以确定语法使用继续分析。沿着这些路线对规范LR(1)解析算法进行的天真修改不能保证停止;因此,我们开发了一个测试,它在语法变化时检查语法,如果语法变化的方式使解析器先前的假设无效,则停止解析。有了这个测试,我们可以开发我们的解析算法并证明它是正确的。这样做,我们转向早期的相关工作;程序设计语言的想法,它可以扩展到包括新的语法结构几乎已经存在,只要高级程序设计语言的想法。早期构建这样一种程序设计语言的努力受到了不成熟的形式语言理论的阻碍。最近构建转换语言的努力要么依赖于一个低效的源到源翻译链;要么它们有一个缺陷,存在于我们的天真解析算法中,因为它们无法停止。本算法不具有这些不期望的属性,因此,它应该证明是一种新的程序设计语言的有用的基础。
2006-07-26 cs.PL
Synthesizing Queries via Interactive Sketching
我们提出了一种新的方法来程序合成,重点是合成数据库查询。在一个高层次上,我们提出的算法作为输入的草图与软约束编码用户的意图,然后迭代地与用户进行交互,以完善草图。在每一步,我们的算法提出了一个候选细化的草图,用户可以接受或拒绝。通过利用这种丰富的用户反馈形式,我们的算法能够解决用户意图中的模糊性并提高可扩展性。特别是,假设用户提供了准确的输入和响应,那么我们的算法保证收敛到真正的程序(即,用户认可的一个)在多项式时间内。我们执行我们的算法的定性评估,显示它可以用来合成各种查询的学术出版物的数据库。
2021-10-11 cs.PL
Synthesizing Specifications
本文提出了一种自动综合程序规格的方法,通过用户提供的查询和领域特定语言L,生成最佳且穷尽的L-属性集合,并在工具Spyro中实现,适用于规格挖掘、抽象域操作和代数属性综合。
2024-02-05 cs.PL
Automating Thinning Theorem: Synthesizing Efficient Dynamic Programming Algorithms
针对Thinning技术应用门槛高、单独使用难以生成专家级高效动态规划算法的问题,提出MetHyl及整合三条优化规则的MetHyl+方法,实现Thinning自动化,在37项任务上多数获指数级加速且超七成达专家效率。
2023-07-21 cs.PL
Toward Inferring Accurate Context-free Grammars for Big Languages in a Black-box Setting
University of Texas at Arlington(阿灵顿得克萨斯大学);Islamic University of Technology(伊斯兰理工大学);University of Texas at Austin(奥斯汀得克萨斯大学)
针对黑盒上下文无关语法推断在大型语言中存在的可扩展性、准确性和语法可读性问题,Xvada引入新技术,在实证比较中语法准确性和紧凑性优于对手,还发现Python Liquid引擎漏洞及多个新漏洞,且相关内容可免费获取。
2026-07-16 cs.PL cs.SE
AI Coders Are Among Us: Rethinking Programming Language Grammar Towards Efficient Code Generation
Singapore Management University(新加坡管理大学);Monash University(莫纳什大学);Beihang University(北京航空航天大学)
本研究针对现有编程语言语法适配人类阅读却增加LLM计算负担的问题,提出面向AI的语法概念,开发了首个Python的AI导向语法SimPy,可在保持甚至提升模型性能的同时显著减少token用量。
2024-08-14 cs.AI cs.PL cs.SE
Synthesizing Backward Error Bounds, Backward
Cornell University(康奈尔大学)
本文提出一个形式框架,用于对广泛数值程序进行可靠的自动后向误差分析。通过扩展后向稳定性定义,开发了Shel类别,并实现工具eggshel自动证明程序的后向稳定性。
2026-04-17 cs.PL
Synthesizing Imperative Programs from Examples Guided by Static Analysis
Korea University(高丽大学)
我们提出了一种新的算法,综合了必要的程序介绍编程课程。给定一组输入输出示例和一个部分程序,我们的算法生成与每个示例一致的完整程序。我们的主要思想是结合枚举程序合成和静态分析,积极修剪出一个大的搜索空间,同时保证找到,如果有的话,一个正确的解决方案。我们已经实现了我们的算法在一个工具,称为SIMPL,并评估它的30个问题中使用的入门编程课程。结果表明,SIMPL能够在平均6.6秒内解决基准问题。
2017-06-13 cs.AI cs.PL
LOUD: Synthesizing Strongest and Weakest Specifications
本文提出LOUD框架,解决非确定性程序规范合成问题,支持存在量词,合成最强L-后果与最弱L-蕴含项,并实现ASPIRE求解器用于错误识别、属性提取和博弈策略合成。
2025-02-27 cs.PL
Synthesizing Programs with Continuous Optimization
Texas A&M University(德克萨斯农工大学);Intel Labs(英特尔实验室);Merly AI(Merly人工智能公司)
本文将程序合成重新表述为连续优化问题,采用协方差矩阵适应进化策略求解,并提出映射方案转换为实际程序,实验表明GENESYS系统在固定时间预算内比现有技术多合成28%的程序。
2023-04-03 cs.AI cs.PL
Verifying and Synthesizing Constant-Resource Implementations with Types
我们提出了一种新的类型系统,用于验证程序正确实现恒定资源的行为。我们的类型系统扩展了最近的工作自动摊销资源分析(AARA),一组技术,自动推导出可证明的上限的资源消耗的程序。我们设计了新的技术,建立在潜在的方法,以实现组合性,精度和自动化。对于大多数实际应用程序来说,一个严格的全局要求,即程序总是保持恒定的资源使用,限制太多。对于只允许观察程序部分状态和行为的攻击者来说,要求程序的资源行为保持不变就足够了。为了说明这一点,我们的类型系统将信息流跟踪纳入其资源分析。这允许我们的系统在某些情况下验证需要违反恒定时间要求的程序,只要这样做不会将机密信息泄露给攻击者。我们正式通过定义一个新的概念,资源感知的不干扰,这种保证,并证明我们的系统强制执行it.Finally,我们展示了我们的类型推断算法可以用来合成一个恒定的时间实现,不能被验证为安全,有效地自动修复不安全的程序。我们还展示了如何计算资源使用的下限的第二种新的AARA系统,可以用来获得定量的信息量,通过其资源使用的程序泄漏的界限。我们在Resource Aware ML中实现了这些系统中的每一个,并表明它可以应用于验证许多应用程序中的恒定时间行为,包括加密和解密例程,数据库查询和其他资源感知功能。
2018-01-05 cs.PL
Real-to-Sim Generation: Synthesizing Scenario Programs from Real-World Data via Constraint Solving
State Key Laboratory of Complex & Critical Software Environment, National University of Defense Technology(复杂与关键软件环境国家重点实验室,国防科技大学)
提出R2SGEN框架,通过解耦SMT约束求解和定制剪枝,从真实数据合成物理合理的场景程序,在nuScenes上优于LLM基线。
2026-09-22 cs.PL
Axon: A Synthesizing Superoptimizer for Tensor Programs
University of Illinois at Urbana-Champaign(伊利诺伊大学厄巴纳-香槟分校);Amazon Web Services(亚马逊网络服务)
提出Axon,一种通过程序综合自动生成目标指令并探索语义等价变体以选择最佳性能内核的张量程序超优化器,利用SMT保证变换语义正确性。
2026-06-26 cs.CL cs.PF cs.PL
Ezhil: A Tamil Programming Language
University of Texas at Arlington(德克萨斯大学阿灵顿分校)
Ezhil是一种基于泰米尔语的解释过程程序设计语言。选择泰米尔语关键字和语法,使母语为泰米尔语的人在Ezhil系统中编写程序。Ezhil允许更接近泰米尔语言逻辑结构的计算机程序的简单表示,相当于现代英语程序设计语言中的条件,分支和循环语句。Ezhil是一种紧凑的程序设计语言,针对泰米尔语新手计算机用户。这里报告了Ezhil的语法和一些示例程序,这些程序来自使用Python编程语言1的初始概念验证实现。据我们所知,Ezhil语言是第一个免费提供的泰米尔程序设计语言。
2009-07-28 cs.CL cs.PL
Learning Highly Recursive Input Grammars
本文提出了Arvada算法,它是一个从一组正例和一个布尔值预言机中学习上下文无关文法的算法。Arvada通过从正例中构建解析树来学习上下文无关文法。从最初的平面树开始,Arvada通过一个关键操作为这些树构建结构:它将树中的兄弟节点序列冒泡到一个新节点中,为树添加一层间接层。冒泡操作使学习的语法能够递归泛化。我们对Arvada与GLADE进行了评估,发现它在召回率和F1得分上平均提高了4.98倍和3.13倍,而只会导致1.27倍的减速,并且只需要0.87倍的oracle调用。与GLADE相比,Arvada在具有高度递归结构的语法上有着特别显著的改进,比如那些程序设计语言。
2021-08-30 cs.PL cs.SE
Fix Bugs with Transformer through a Neural-Symbolic Edit Grammar
Iowa State University(爱荷华州立大学);AWS AI(AWS人工智能)
我们介绍了NSEdit(神经符号编辑),一种新的基于transformer的代码修复方法。只给出包含bug的源代码,NSEdit预测可以修复bug的编辑序列。编辑语法被公式化为正则语言,并且Transformer将其用作神经符号脚本接口来生成编辑程序。我们修改Transformer并添加一个指针网络来选择编辑位置。训练重排序器的集合以重排序由束搜索生成的编辑序列。我们对验证集上的重排序器进行微调,以减少过度拟合。NSEdit在各种代码修复数据集上进行了评估,并在CodeXGLUE基准测试的Tufano小数据集上实现了新的最先进的精度($24.04\%$)。NSEdit在程序因包而异以及有bug的程序是具体的情况下执行稳健。我们对我们的方法进行了详细的分析,并证明了每个组件的有效性。
2022-04-13 cs.AI cs.LG cs.PL
Automatic Generation of Python Programs Using Context-Free Grammars
New York University Abu Dhabi (NYUAD)(纽约大学阿布扎比分校);Ecole nationale Supérieure d’Informatique (ESI)(国立高等信息学院)
本文提出开源工具 TinyPy Generator,利用 BNF 形式的上下文无关文法递归生成构造即正确、复杂度可调的大规模 Python 程序,以支持语言模型训练及解释器、编译器稳健性验证。
2024-03-11 cs.CL cs.LG cs.PL
Constrained Decoding for Fill-in-the-Middle Code Language Models via Efficient Left and Right Quotienting of Context-Sensitive Grammars
Northeastern University(东北大学);MIT-IBM AI Lab(麻省理工学院-IBM人工智能实验室);AWS AI Labs(亚马逊云科技人工智能实验室)
本文提出一种基于 Earley 解析扩展的左商与右商解析方法,用于在填空式代码生成中尽早拒绝语法错误代码,并在 Python 3 上验证其可显著降低语法错误率。
2024-09-04 cs.LG cs.PL cs.SE
Building Fast Fuzzers
模糊技术是评估程序抗攻击鲁棒性的关键技术之一。Fuzzing必须能够有效地生成涵盖功能和发现漏洞的输入。但它也必须能够有效地迅速生产这些投入。随机模糊器非常有效,因为它们可以快速生成随机输入;但它们不是很有效,因为生成的大部分输入在语法上是无效的。基于语法的模糊器利用语法(或输入语言的另一种模型)来产生语法正确的输入,因此可以快速覆盖输入空间和相关功能。然而,现有的基于语法的模糊器的效率惊人地低:即使是最快的语法模糊器Dharma产生的输入仍然比最快的随机模糊器慢1000倍。到目前为止,可以有一个有效的或一个有效的模糊,但不能两者兼而有之。在本文中,我们描述了如何建立快速的语法模糊器从地面上,从程序设计语言实现的角度来处理模糊的问题。从Python教科书方法开始,我们采用并适应函数式编程和虚拟机实现技术中的优化技术,以及其他新颖的特定于域的优化。在我们的F1原型模糊,这些提高生产速度的一个因素100- 300最快的语法模糊达摩。由于F1甚至比词法随机模糊器快5- 8倍,我们可以更快地找到bug,并使用比以前可能的更大的有效输入进行测试。
2019-11-18 cs.CR cs.PL cs.SE
Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations
最近的程序合成技术帮助用户定制CAD模型(例如,用于3D打印),将低级三角形网格反编译为构造性实体几何(CSG)表达式。如果没有循环或函数,编辑CSG可能需要许多协调的更改,并且现有的网格反编译器使用可能混淆高级结构的语法。本文提出了第二个反编译阶段,强大的“收缩”非结构化CSG表达式到更多的可编辑程序与地图和折叠操作。我们提出Szalinski,一个工具,使用平等饱和与语义保持CAD重写有效地搜索较小的等效程序。Szalinski依赖于逆变换,这是求解器推测性地将等价物添加到E图的一种新方法。我们定性评估Szalinski的案例研究,显示它如何与现有的网格反编译器组成,并证明Szalinski可以在几秒钟内缩小大型模型。
2020-04-12 cs.CG 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
Synthesizing Programmatic Reinforcement Learning Policies with Large Language Model Guided Search
National Taiwan University(台湾大学);Microsoft(微软公司)
本文提出LLM-GS框架,通过Pythonic-DSL策略和Scheduled Hill Climbing算法,利用大语言模型引导搜索高效合成程序化强化学习策略,显著提升样本效率并降低使用门槛。
2025-03-11 cs.AI cs.LG cs.PL
Syntax-Guided Program Reduction for Understanding Neural Code Intelligence Models
University of Houston(休斯顿大学)
神经代码智能(CI)模型是不透明的黑盒子,对它们在预测中使用的功能几乎没有提供任何见解。这种不透明性可能会导致对它们的预测的不信任,并阻碍它们在安全关键应用中的广泛采用。最近,输入程序缩减技术已被提出来识别输入程序中的关键特征,以提高CI模型的透明度。然而,这种方法是语法未知的,并且不考虑程序设计语言的语法。在本文中,我们采用语法指导的程序减少技术,认为在减少输入程序的语法。我们在不同类型的输入程序上的多个模型上的实验表明,语法引导的程序缩减技术更快,并且在缩减的程序中提供更小的关键标记集。我们还表明,关键令牌可以用于生成高达65%的输入程序的对抗性示例。
2022-06-14 cs.LG cs.PL cs.SE
Adaptive Scaffolding in Block-Based Programming via Synthesizing New Tasks as Pop Quizzes
MPI-SWS(马克斯·普朗克软件系统研究所);University of Vienna(维也纳大学);Microsoft Research(微软研究院)
基于块的编程环境越来越多地用于向初学者介绍计算概念。然而,由于编程任务的概念性和开放性,新手学生经常在这些环境中挣扎。为了有效地支持学生努力解决给定的任务,重要的是提供自适应的脚手架,引导学生走向解决方案。我们介绍了一个脚手架框架的基础上提出的多项选择编程任务的流行测验。为了自动生成这些流行测验,我们提出了一种新的算法,PQuizSyn。更正式地说,给定具有解决方案代码的参考任务和学生的当前尝试,PQuizSyn合成具有以下特征的突击测验的新任务:根据学生当前的尝试进行个性化),(b)可理解(即,容易理解和解决);(c)隐藏(即,不要泄露解决方案代码)。我们的算法综合了这些任务,使用基于符号推理和基于图形的代码表示的技术。我们表明,我们的算法可以生成数百个流行测验,不同的学生尝试的参考任务,从小时的代码:迷宫挑战和卡雷尔。我们通过专家评分来评估这些突击测验的质量。此外,我们还建立了一个在线平台,用于练习基于块的编程任务,这些任务通过基于反馈的突击测验获得授权,并报告来自初始用户研究的结果。
2023-03-28 cs.AI cs.CY 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
Towards Synthesizing Complex Programs from Input-Output Examples
University of California, Berkeley(加州大学伯克利分校)
近年来,已经开发了深度学习技术来提高从输入-输出示例进行程序合成的性能。尽管它取得了重大进展,但就其复杂性而言,可以通过最先进的方法合成的程序仍然是简单的。在这项工作中,我们沿着这个方向向前迈出了重要的一步,提出了一类新的具有挑战性的任务,在域中的程序合成从输入输出的例子:学习上下文无关的解析器对输入程序和他们的解析树。我们发现,这类任务比以前研究的任务更具挑战性,现有方法的测试准确率几乎为0%。我们通过开发三种新颖的技术来应对挑战,这些技术的灵感来自三种新颖的观察,这些观察揭示了使用深度学习来合成复杂程序的关键因素。首先,使用不可微机器是有效限制搜索空间的关键。因此,我们提出的方法学习神经程序操作特定于域的不可微机器。其次,递归是实现可推广性的关键。因此,我们在不可微机器的设计中引入了递归的概念。第三,强化学习是学习如何操作不可微机器的关键,但是现有的强化学习算法也很难从冷启动开始有效地训练模型。我们开发了一种新的基于两阶段强化学习的搜索算法来克服这个问题。在我们的评估中,我们表明,使用我们的新方法,神经解析程序可以学习到在比训练样本长500倍的测试输入上实现100%的测试准确率。
2018-03-08 cs.AI cs.LG cs.PL
VerMCTS: Synthesizing Multi-Step Programs using a Verifier, a Large Language Model, and Tree Search
Kempner Institute at Harvard University(哈佛大学肯普纳研究所);Harvard University(哈佛大学);TU München(慕尼黑工业大学);Northeastern University(东北大学);University of Alabama at Birmingham(阿拉巴马大学伯明翰分校);University of Oxford(牛津大学)
本文提出VerMCTS,结合验证器与LLM改进蒙特卡洛树搜索,在Dafny和Coq中合成已验证的多步程序,平均pass@5000提升超30%。
2024-05-24 cs.AI cs.LG cs.LO