Liveness-Driven Random Program Generation
随机生成的程序在测试编译器和程序分析工具中很受欢迎,通过随机测试发现了真实C编译器中的数百个错误。然而,现有的随机程序生成器可能会生成大量的死代码(其结果永远不会被使用的计算)。这使得相对较少的代码可以执行目标编译器的更复杂的优化。为了解决这个缺点,我们引入了活性驱动的随机程序生成。在这种方法中,随机程序是自底向上构造的,由同步结构数据流分析指导,以确保生成器永远不会生成死代码。该算法被实现为一个插件的框架框架。我们评估它相比,Csmith,标准的随机C程序生成器。我们的工具生成的程序可以编译成具有更复杂指令组合的更多机器码。
2017-09-13 cs.PL
A Denotational Engineering of Programming Languages
这本书致力于两个研究领域:(1)设计程序设计语言以及它们的指称模型。一种语言的指称模型由两个多排序的代数--一个语法代数和一个指称代数--以及一个从语法到指称的(唯一的)同态组成,称为语言的语义。(2)用指称模型为语言设计合理的程序构造器。在我们的方法程序语法包含其完全正确性规范。如果一个程序的说明是正确的,那么它就是正确的。如果给定正确的组件程序产生正确的结果程序,则程序构造器是可靠的。这两种方法都说明了一个例子语言Lingua。
2019-05-04 cs.PL
On instruction sets for Boolean registers in program algebra
在以前的工作中进行的程序代数的设置,包括工作在该地区的指令序列大小的复杂性,我们选择的指令集的布尔寄存器,只包含几个可能的种类的指令。本文研究了布尔寄存器所有可能指令集的指令序列大小有界函数完备性。我们期望,这项研究的结果将是有用的,充分评估的工作结果,关注的是指令序列大小复杂性的下限。
2016-06-06 cs.PL
A program logic for fresh name generation
我们给出了Pitts和Stark的ν-演算的程序逻辑,它是按值调用的简单类型λ-演算的扩展,具有生成新名称的机制。可以比较名字是否相等,从而产生具有细微可观察属性的程序。由生成和抽象之间的交互产生的隐藏名称通过类型上下文上的二阶量词逻辑地捕获。我们说明使用的逻辑推理著名的困难的情况下,从文献。
2021-03-12 cs.LO cs.PL
Unified Pre-training for Program Understanding and Generation
University of California, Los Angeles(加州大学洛杉矶分校);Columbia University(哥伦比亚大学)
代码摘要和生成允许在程序设计语言(PL)和自然语言(NL)之间进行转换,而代码转换则有助于将遗留代码从一个PL迁移到另一个PL。本文介绍了PLBART,序列到序列模型能够执行广泛的程序和语言理解和生成任务。PLBART通过去噪自动编码在大量Java和Python函数以及相关NL文本上进行预训练。在英语语言的代码摘要,代码生成,并在7种程序设计语言的代码翻译的实验表明,PLBART优于或竞争对手的最先进的模型。此外,对区分性任务的实验,例如,程序修复、克隆检测和脆弱代码检测,证明了PLBART在程序理解中的有效性。此外,分析表明,PLBART学习程序语法,风格(例如,标识符命名约定),逻辑流(例如,else块内if块等效于else if块),这对于编程语义是至关重要的,因此即使在有限的注释下也是优秀的。
2021-04-10 cs.CL cs.PL
One-sorted Program Algebras
Kleene代数与测试,KAT,提供了一个简单的两个排序的代数框架,验证性质的命题,而程序。带Domain的Kleene代数KAD是KAT的一种单排序替代。KAT的方程理论嵌入到KAD中,但KAD缺乏KAT的一些自然属性。例如,不是每个Kleene代数都能扩展成KAD,并且每个KAD中的测试子代数都必须是负锥的极大布尔子代数。在本文中,我们提出了一个泛化的KAD,避免这些功能,同时仍然嵌入方程理论的KAT。我们表明,几个自然属性的域运营商的KAD可以添加到广义框架,而不影响的结果。我们考虑一个变体的框架,其中测试互补定义使用残留的Kleene代数乘法。
2022-05-06 cs.FL cs.LO cs.PL
Program algebra for Turing-machine programs
本文提出了以图灵带指令为基本指令的指令序列的代数理论,给出了指令序列在执行过程中所产生的行为,以及这些行为与执行环境所提供的图灵带之间的相互作用。这个理论为可计算性和计算复杂性等领域的理论发展提供了一个环境,它通过提供等式推理的可能性而与众不同,并且比已知版本的图灵机计算模型提供的环境更一般。该理论基本上是一个实例化的参数化代数理论的基础上的一条线的研究,其中有关的问题,各种各样的学科,从计算机科学已严格调查思想方面的指令序列。
2019-12-07 cs.LO cs.PL
Version Space Algebras are Acyclic Tree Automata
版本空间代数是一种表示程序空间的方法,可以使用并集、交集和叉积/"连接”运算符来组合。在其具体形式为具有显式联合和连接节点的AST中,它们具有压缩表示指数大空间的程序的能力,因此它们已成为自2010年引入FlashFill以来最流行的枚举程序合成方法。我们提出了一个从版本空间代数到非确定有限树自动机的线性时间语义保持的构造嵌入,表明前者只是后者的一个特例。结合最近的结果发现之间的对应关系的e-图和最小的确定性树自动机,这表明树自动机是严格的概括最近所有的主要方法,有效地表示大空间的程序共享。
2021-07-27 cs.PL
Neural Sketch Learning for Conditional Program Generation
Rice University(莱斯大学)
我们研究了在强类型的、类似Java的程序设计语言中生成源代码的问题,给出了一个标签(例如一组API调用或类型),其中携带了有关所需代码的少量信息。所生成的程序被期望尊重程序和标签之间的“现实”关系,如在训练期间可用的标记程序的语料库所例示的。在这样的条件程序生成的两个挑战是,生成的程序必须满足一组丰富的语法和语义约束,源代码包含许多低层次的功能,阻碍学习。我们通过训练神经生成器来解决这些问题,而不是在代码上,而是在程序草图上,或者程序语法的模型上,这些模型抽象出了不能在程序中泛化的名称和操作。在生成过程中,我们推断后验分布的草图,然后具体化样本从这个分布到类型安全的程序使用组合技术。我们实现了我们的想法,在一个系统中生成API重Java代码,并表明,它往往可以预测整个身体的方法给出了几个API调用或数据类型出现在方法。
2018-04-12 cs.LG cs.PL
Computing Integer Sequences: Filtering vs Generation (Functional Pearl)
作为一个教学经验的报告,我们分析了计算两个整数序列的Haskell程序:Hamming序列和Ulam序列。对于这两种情况,我们研究了两种计算策略:第一种是基于过滤掉那些不属于序列的自然数,而第二种是基于直接生成属于序列的数。提倡在不同的编程范式编程时出现的想法之间的交叉施肥,在背景下,我们勾勒出一些考虑相应的C程序解决同样的两个问题。
2018-08-01 cs.PL
Program algebra for random access machine programs
本文提出了以随机存取机(RAM)指令为基本指令的指令序列的代数理论,讨论了指令序列在执行过程中所产生的行为,以及这些行为与RAM存储器之间的相互作用。该理论为诸如计算复杂性和算法分析等领域的理论发展提供了一种设置,该算法通过提供等式推理的可能性来确定指令序列是否计算给定函数而使其自身与众不同,并且比任何已知版本的RAM计算模型所提供的设置更通用。在此设置中,一个半现实的版本的RAM模型的计算和面向位的时间复杂度措施,这个版本的介绍。在所考虑的时间尺度下,半真实RAM可以用多带图灵机以二次时间开销来模拟。
2022-11-22 cs.CC cs.PL
Towards a Linear-Algebraic Hypervisor
本文提出一种并行虚拟机,通过评估数百万个并发数组程序,发现其在相对传统顺序评估的情况下可达到147倍的加速效果。
2026-04-14 cs.DC cs.PF cs.PL
A Case for Dynamic Reverse-code Generation to Debug Non-deterministic Programs
回溯(即,反向执行)帮助调试器的用户沿着程序的执行路径自然地向后思考,并且向后思考使得定位错误的起源变得容易。到目前为止,回溯主要通过状态保存或检查点来实现。然而,这些实施方式固有地不缩放。与此同时,一种基于反向代码生成的回溯方法似乎很有前途,因为执行反向代码可以在不保存状态的情况下恢复程序的先前状态。在文献中,可以找到生成反向代码的两种方法:(a)静态反向-代码生成,其在开始调试会话之前通过静态分析来预生成反向代码,以及(b)动态反向-代码生成,其通过在调试会话期间即时应用动态分析来生成反向代码。特别是,我们在以前的工作中支持后者,以适应程序的非确定性,例如,多线程。为了证明我们的动态反向代码生成的有用性,本文提出了一个案例研究的各种回溯方法,包括我们的。我们比较了内存使用的各种回溯方法在一个简单但不平凡的例子,一个有界缓冲区的程序。在这种情况下,非确定性的程序,如有界缓冲区的程序,我们的动态反向代码生成优于现有的回溯方法的内存效率。
2013-09-20 cs.PL cs.SE
Algebra-based Loop Synthesis
我们提出了一种合成满足给定多项式循环不变量的程序循环的算法。我们考虑的一类回路可以用一个常系数的代数递归方程组来建模。我们把循环合成的任务转化为一个多项式约束问题,通过精确地描述满足给定不变量的所有循环的集合。我们证明了我们的方法的合理性,以及其完整性相对于一个先验的固定上限的程序变量的数量。我们的工作对程序验证的应用,以及从代数关系生成数字序列。我们在Absynth工具中实现了我们的工作,并报告了我们使用循环合成的初步实验。
2020-04-28 cs.PL
Generation and analysis of lamplighter programs
我们考虑一个程序设计语言的基础上,只使用组合和迭代作为控制结构的lampighter组。我们推导出生成函数和计数公式,这种语言和它的特殊子集,建立语义不同的程序的增长率上下限。最后,我们展示了如何对随机程序进行采样,并分析了由这种采样引起的运行时分布。
2018-10-22 cs.DM cs.FL cs.PL
Data-Driven Feedback Generation for Introductory Programming Exercises
本文介绍了“搜索,对齐和修复”数据驱动的程序修复框架,以自动生成反馈的入门编程练习。与现有技术不同,我们的目标是为大型或MOOC规模的入门编程课程开发一种高效,全自动和问题不可知的技术。我们利用大量可用的学生提交在这样的设置和开发新的算法来识别类似的程序,对齐正确和不正确的程序,并通过找到最小的修复修复不正确的程序。我们已经在SARFGEN系统中实现了我们的技术,并对来自Microsoft-DEV 204.1X edX课程和Microsoft CodeHunt平台的数千名真实学生的尝试进行了评估。我们的研究结果表明,SARFGEN可以在平均两秒内为89.7%的错误学生提交生成简洁,有用的反馈。它已与Microsoft-DEV 204. 1XedX类集成并部署用于生产。
2017-11-20 cs.CY cs.PL cs.SE
Synthesis of models for order-sorted first-order theories using linear algebra and constraint solving
声明性程序终止分析的最新发展强调使用适当的模型作为一种通用的方法来证明声明性程序的终止性的逻辑理论代表的程序处于危险之中。在这种情况下,顺序排序的一阶逻辑提供了一个强大的框架来表示声明性程序。它还提供了一个目标逻辑,以通过转换获得其他逻辑的模型。我们研究了顺序排序的一阶逻辑的数值模型的自动生成及其在程序分析中的应用,特别是在声明式程序的终止分析中。我们使用凸域给域的不同种类的顺序排序的签名,我们解释排序的签名通过适当适应凸矩阵的解释排名的符号。这种数值解释允许使用现有的算法和工具,从线性代数和算术约束求解合成的模型。
2015-12-22 cs.LO cs.PL
Invariant Generation for Multi-Path Loops with Polynomial Assignments
程序分析需要生成程序属性,这些属性表示在中间程序位置保持的条件。当涉及到具有循环的程序时,这些属性通常表示为循环不变式。在本文中,我们研究了一类多路径程序循环与数值变量,特别是嵌套循环的条件,其中的分配程序变量是多项式表达式的程序变量。我们称这类循环扩展P-可解的,并介绍了一种算法,用于生成所有的多项式不变量,这样的循环。通过一个迭代过程,采用格罗布纳基计算,我们的方法计算的多项式理想的多项式不变量的每个程序路径,并结合这些理想顺序,直到达到一个固定点。这个不动点表示给定的扩展P-可解循环的所有多项式不变量的多项式理想。我们证明了我们的方法的终止,并表明达到不动点的最大迭代次数线性依赖于程序变量的数量和内部循环的数量。特别地,对于一个有m个程序变量和r个条件分支的循环,我们证明了m*r次迭代的上界。我们在Alignator软件包中实现了我们的方法。此外,我们评估了18个程序与多项式运算,并比较它与现有的方法在不变量生成。结果表明,我们的方法的效率。
2018-01-11 cs.PL cs.SC
Compositional Invariant Generation via Linear Recurrence Analysis
本文提出了一种自动生成命令式程序数值不变量的新方法。给定一个程序,我们的程序计算一个二进制的输入/输出关系的程序状态过近似的行为的程序。它是组合的,因为它通过将程序分解为多个部分,计算每个部分的抽象含义,然后组合这些含义来运行。我们的方法近似循环行为的基础上,首先近似的循环体的意义,从近似提取递归关系,然后使用封闭的形式来近似循环。我们的实验表明,在验证任务,我们的方法是有竞争力的领先的不变生成和验证工具。
2015-01-31 cs.LO cs.PL
Probabilistic Programs of Thought
University of California Los Angeles(加州大学洛杉矶分校);Allen Institute for AI(Allen人工智能研究所)
本文提出思维概率程序框架,通过利用生成程序的分布,减少GPU计算开销,提升代码生成和数学推理任务的效率。
2026-04-19 cs.AI cs.CL cs.PL
Polynomial Invariant Generation for Non-deterministic Recursive Programs
我们考虑经典的问题,不变量生成的程序与多项式分配,并专注于合成不变量,是一个严格的多项式不等式的连接。我们提出了一个健全的和半完全的方法的基础上positivstellensaetze,即定理,在半代数几何的特点,正多项式在一个半代数集。据我们所知,这是第一个不变量生成方法,提供完整性保证的不变量组成的多项式不等式。此外,在理论方面,我们的方法的最坏情况的复杂性是次指数,而以前已知的完整的方法(Colon等,CAV 2003),它只能处理线性不变量的最坏情况的复杂性是指数。在实践方面,我们减少了不变量生成问题的二次规划(QCLP),这是一个经典的优化问题,许多工业求解器。最后,我们证明了我们的方法的适用性,通过提供实验结果在几个学术基准。
2020-04-06 cs.LO cs.PL
Transfer Learning Across Heterogeneous Features For Efficient Tensor Program Generation
Stony Brook University(石溪大学);Argonne National Laboratory(阿贡国家实验室);Brookhaven National Laboratory(布鲁克海文国家实验室)
针对异构硬件下张量程序自动调优搜索空间大、变换组合爆炸的问题,提出学习联合神经网络与硬件特征并迁移至新目标,结合注意力机制精简数据集,在保持成对比较准确率的同时大幅降低调优时间。
2023-12-26 cs.LG cs.PL
SMLtoCoq: Automated Generation of Coq Specifications and Proof Obligations from SML Programs with Contracts
函数式程序的形式化推理应该是直接和优雅的,然而,它通常不是理所当然的。在证明助手中进行推理需要在那些工具中“重新实现”代码,这远非小事一桩。SMLtoCoq提供SML程序和函数契约到Coq的自动翻译。程序被翻译成Coq规范,函数合同成定理,然后可以正式证明。使用Equations插件和其他成熟的Coq库,SMLtoCoq能够翻译SML程序,而不会产生包含部分函数,结构,函子,记录等的副作用。此外,我们提供了SML基础库的许多部分的Coq版本,因此对这些库的调用几乎保持原样。
2021-07-16 cs.LO cs.PL
Benchmarking LLM Code Generation for Audio Programming with Visual Dataflow Languages
Columbia University(哥伦比亚大学);Barnard College, Columbia University(巴纳德学院,哥伦比亚大学);Eastlake High School(伊斯特莱克高中)
本文基准评测了LLM在音频可视化编程语言中通过元编程和JSON直接节点生成两种表示层级的代码生成表现,发现元编程在代码形式良好时语义正确性更高,且提示加入随机性与循环可提升生成代码复杂度。
2024-09-01 cs.AI cs.CL cs.PL
Neural Program Generation Modulo Static Analysis
Rice University(莱斯大学);UT Austin(德克萨斯大学奥斯汀分校);University of Wisconsin(威斯康星大学)
最先进的源代码神经模型往往在生成单个表达式和代码行时进行评估,并且通常在生成整个方法体等长期任务时失败。我们建议使用弱监督静态程序分析器来解决这个缺陷。我们的神经符号方法允许深度生成模型通过调用静态分析工具来符号化地计算它已经生成的代码中的长距离语义关系。在训练过程中,模型观察这些关系,并学习生成以它们为条件的程序。我们应用我们的方法来生成整个Java方法的问题,给出了包含该方法的类的其余部分。我们的实验表明,该方法大大优于国家的最先进的变压器和模型,明确尝试学习程序语义在这项任务中,无论是在生产程序的基本语义错误和语法匹配的地面真相。
2021-11-22 cs.AI cs.LG cs.PL