A Framework for Datatype Transformation
我们研究程序演化的一个维度,即程序中数据类型声明的演化。为此,设计了一套基本的变换算子。我们涵盖了结构保持重构,但也结构扩展和减少适应。进行数据类型转换的目标程序和对数据类型转换进行编码的Meta程序都是函数程序。
2003-02-24 cs.PL
Optimal Stateless Model Checking of Transactional Programs under Causal Consistency
我们提出了一个有效的无状态模型检验(SMC)的框架下的因果一致性,CCv,CM,CC,读提交和读原子五个突出的模型。我们的方法是基于探索下的程序顺序(PO)和读取(RF)关系的痕迹。我们的SMC算法是可证明的最佳意义上,它探讨了每一个PO和RF的关系,正好一次。我们已经实现了我们的框架中的一个工具,称为TRANSPORKER。实验结果表明,TRANSPORKER在经典的分布式数据库基准测试中具有良好的异常检测性能。
2023-01-16 cs.PL
From Concurrent Programs to Simulating Sequential Programs: Correctness of a Transformation
Frama-C是一个软件分析框架,它为实现C程序的各种静态和动态分析的插件提供公共基础设施和公共行为规约语言。大多数插件不支持并发。我们提出了Conc 2Seq,一个基于程序转换的框架-C插件,能够利用现有的庞大的插件代码库,并处理并发C程序。在本文中,我们形式化和草图背后的Conc 2Seq的程序转换原则的正确性证明,并提出了一个努力实现完全机械化的形式化和证明与证明助手Coq。
2017-08-24 cs.PL
A Semantics for Approximate Program Transformations
近似程序转换是一种可以在指定的经验误差范围内改变程序语义的转换。这种转换有广泛的应用:它们可以减少计算时间,功耗和内存使用,并且在某些情况下,可以允许实现不可计算的操作。近似程序变换的正确性证明是定量的。不幸的是,与标准程序转换不同,目前还没有模块化的方法来证明近似转换本身的正确性。误差界必须证明每个转换程序单独,并必须重新证明每次修改程序或一组不同的近似应用。在本文中,我们给出了一个语义,使定量推理的一个大类的近似程序变换的本地,组合的方式。我们的语义是基于程序之间的距离的概念,它定义了一个近似变换是正确的错误界意味着什么。关键的见解是,程序之间的距离一般不能用度量空间和实数来表示。相反,我们的语义承认每个类型构造的距离的自然概念;例如,数字被用作数值数据的距离,函数被用作函数数据的距离,多态数据项被用作多态数据的距离。然后,我们将展示我们的语义如何应用于两个示例近似:用浮点数替换实数和循环穿孔。
2013-04-19 cs.PL
Horn Clauses as an Intermediate Representation for Program Analysis and Transformation
许多最近的分析传统的命令式程序开始转换程序到逻辑程序,利用现有的LP分析和简单的LP语义。我们建议在整个编译过程中使用逻辑程序作为中间程序表示。通过确保确定性和单模性的限制,逻辑程序可以很容易地转换为机器语言或其他低级语言,同时保持简单的语义,使其适合作为程序分析和转换的语言。我们提出了一个简单的LP语言,强制执行确定性和单模性,并表明它使一个方便的程序表示的分析和转换。
2015-07-21 cs.PL
Symbolic Computation via Program Transformation
符号计算是自动化程序分析的一种重要方法。大多数最先进的工具作为解释器执行符号计算,并直接维护符号数据。在本文中,我们表明,它是可行的,实际上是实用的,而不是使用基于编译器的策略。使用编译器工具,我们提出并实现了一个转换,需要一个标准的程序,并输出一个程序,执行语义等价,但部分符号,计算。转换后的程序在内部维护符号值,并直接对它们进行操作,因此程序可以由工具处理,而不支持符号操作。转换的主要动机是符号验证,但也有许多其他可能的用例,包括测试生成和concolic测试。此外,由于符号计算由程序直接处理,因此使用变换简化了工具。我们已经在LLVM位代码级别实现了转换。本文包括一个实验评估,基于显式状态的软件模型检查器作为验证后端。
2018-05-31 cs.PL
Capture-Avoiding and Hygienic Program Transformations (incl. Proofs)
根据抽象语法树的程序转换通过引入变量捕获而损害引用完整性。当在生成的程序中,变量声明意外地隐藏了变量引用的预期目标时,就会发生变量捕获。现有的转换系统要么不能保证避免变量捕获,要么损害转换的实现。我们提出了一个算法,称为名称修复,自动消除变量捕获从生成的程序系统地重命名变量。名称固定由程序的绑定结构的图形表示引导,并且需要用于转换的源语言和目标语言的名称解析算法。name-fix是通用的,适用于任何支持名称起源跟踪的转换系统中的任意转换。我们验证了名称修复的正确性,并确定一个有趣的类的转换名称修复提供卫生。我们证明了名称修复的适用性,实现捕获避免替代,内联,lambda提升,和两个特定领域的语言编译器。
2014-04-23 cs.PL
Consistency types for replicated data in a higher-order distributed programming language
分布式系统解决了对快速访问资源和数据容错的日益增长的需求。然而,由于可伸缩性的要求,软件开发人员需要用一致性来换取性能。对于某些数据,如果应用程序正确性不受影响,则一致性保证可能会减弱。相反,从具有弱一致性的数据到具有强一致性要求的数据的数据流是有问题的,因为应用正确性可能被破坏。在本文中,我们提出了基于格的复制数据的一致性类型(CTRD),一个高阶的静态一致性类型的语言与复制数据类型。CTRD的类型系统支持多个客户端之间的共享数据,静态地实现了一致性较弱的数据类型与一致性较强的数据类型之间的互不干扰。该语言可以应用于许多分布式应用程序,并保证弱一致性数据的更新永远不会影响强一致性数据。我们还扩展了基本的CTRD与优化,减少同步生成参考图。
2020-10-30 cs.PL
Deriving program transformations by demonstration
针对特定应用程序和上下文调整转换的自动代码转换很难以可访问的方式实现。在本文中,我们提出了一种方法来建立特定于应用程序的代码转换。我们的方法是基于分析的抽象语法表示的范例的本质变化的代码之前和之后的转换被应用。这个分析需要一系列的步骤来识别变化,确定如何推广它,并将其映射到Tumego术语重写系统的术语重写规则。本文中描述的方法假设程序表示在一个语言中立的术语格式,允许工具的基础上,我们的方法被应用到程序编写的主要语言使用的计算科学家利用高性能计算系统。
2013-01-18 cs.PL
Robustness Against Transactional Causal Consistency
本文研究因果一致性变体间关系,证明无写写竞争的程序行为一致,并将鲁棒性检查多项式归约为状态可达性问题,为并发程序验证工具用于因果一致性数据库铺路。
2021-02-02 cs.PL
Probabilistic Resource Analysis by Program Transformation
概率资源分析的目的是从程序输入的概率分布中推导出程序可能的资源使用的概率分布。提出了一种基于多阶段自动重写的方法来分析用C语言子集编写的程序.它生成一个概率分布的资源使用作为一个可能无法计算的表达式,然后将其转换成一个封闭的形式使用过近似表达式。我们提出的技术,概述了实施和显示系统的实验结果。
2016-12-15 cs.PL
A Program Transformation for Continuation Call-Based Tabled Execution
关于程序终止和降低复杂性的表式评估的优点是众所周知的--因为一些建议(特别是那些基于暂停的建议)需要大量的实施、可移植性和维护工作。这种实现的努力减少了程序转换为基础的连续调用技术,在一些效率的成本。然而,Ramesh和Cheng对这个建议的传统表述限制了表谓词和非表谓词的交错,因此不能用于任意程序。在本文中,我们提出了一个完整的翻译连续调用技术,使用传统的建议所需的运行时支持,解决了这些问题,并使之有可能执行任意tableed程序。我们目前的性能结果表明,CCall提供了一个有用的权衡,可以与国家的最先进的实现竞争。
2009-01-25 cs.PL
Program Transformation to Identify List-Based Parallel Skeletons
通过从开发人员那里抽象出并行实现的细节,并行框架被用作构建块来简化并行编程的任务。大多数现有的库都提供了框架的实现,这些框架是在平面数据类型(如列表或数组)上定义的。然而,基于Java的并行编程仍然非常具有挑战性,因为它需要对底层算法进行复杂的分析,并且经常使用低效的中间数据结构。此外,给定程序的算法结构可能与基于列表的骨架的算法结构不匹配。在本文中,我们提出了一种方法来自动转换任何给定的程序,定义在一个列表,更有可能包含基于列表的骨架的实例。这便于使用基于列表的并行骨架的现有实现来并行执行转换后的程序。此外,通过使用现有的转换称为蒸馏结合我们的方法,我们产生的转换程序,包含更少的低效的中间数据结构。
2016-07-08 cs.PL
Dataflow Graphs as Matrices and Programming with Higher-order Matrix Elements
我们考虑两类计算,承认采取线性组合的执行运行:概率采样和广义动画的Chronlow架构。我们改进了早期的技术,几乎连续的程序转换,通过采用一个纪律的二分图连接节点通过一般的变换和节点通过线性变换,这使得它有可能开发和发展这些类的计算通过连续的程序转换的Challowlow程序。二分图的使用使我们能够表示这类的Cuplow程序作为实数矩阵,并通过这些数字的连续变化来发展和修改程序。我们开发了一个形式主义的高阶的Bastlow规划这类Bastlow图的基础上的高阶矩阵元素。我们的一些软件实验进行了简要讨论。
2016-01-06 cs.PL
Unfolding for CHR programs
程序转换是一种有吸引力的技术,它可以提高运行时的效率,空间消耗,更一般地优化给定的程序。从本质上讲,它由一系列的语法程序操作,保持某种语义等价。展开是大多数程序转换系统所使用的基本操作之一,它包括用过程调用的定义替换过程调用。虽然有大量的文献转换和展开的顺序程序,很少有论文已经解决了这个问题的并发语言。本文定义了一个面向可编程逻辑程序的展开系统。我们定义了一个展开规则,证明了它的正确性,并讨论了一些条件,可以用来删除一个展开规则,同时保持程序的意义。我们还证明了,在适当的条件下,合流和终止保持上述转换。逻辑程序设计理论与实践(Theory and Practice of Logic Programming,TPLP)
2013-07-02 cs.PL
A Logic for Correlating Temporal Properties across Program Transformations
程序转换广泛应用于软件的综合、优化和维护。程序转换的正确性依赖于输入程序的一些重要性质的保持。通过把程序看作Kripke结构,程序的许多有趣的性质可以用时序逻辑来表达。在时序逻辑中,公式在单个程序上解释。然而,为了证明变换的正确性,我们会遇到包含一些子公式的公式,这些子公式在输入程序上解释,而在变换后的程序上解释。出现这种情况的一个例子是验证编译器应用的优化程序转换。在本文中,我们提出了一个逻辑称为时间转换逻辑(TTL)的原因,这样的公式。我们考虑不同类型的原始转换,并提出TTL推理规则。我们的程序转换和时序逻辑运算符的定义是新颖的,在他们使用的布尔矩阵代数。这导致了简洁和建设性的规范。此外,我们使用布尔矩阵代数在一个统一的方式来证明可靠的TTL推理规则。
2012-09-24 cs.LO cs.PL
A Modular Program-Transformation Framework for Reducing Specifications to Reachability
提出一个基于插桩自动机的模块化程序转换框架,将终止性等规约转换为可达性问题作为预处理步骤,使现有验证器能高效处理非原生支持的规约。
2025-01-27 cs.PL
Towards Correctness of Program Transformations Through Unification and Critical Pair Computation
在具有上下文语义的扩展lambda演算中,程序转换的正确性通常基于对操作语义的推理,该操作语义是重写语义。证明正确性的一个成功的方法是将上下文引理与程序转换和归约规则之间的重叠计算相结合,然后是所谓的完整图集。该方法类似于项重写系统完备化的临界对计算。我们探讨的情况下,这些重叠的计算可以在一阶的方式通过使用统一算法的关键对计算的变体。作为一个案例研究,我们应用该方法的λ演算与递归让表达式,并描述了一个有效的统一算法,以确定所有重叠的一组转换与所有减少规则。统一算法采用了许多排序的条款,左交换建模多集,上下文变量的不同种类和一个机制,competencies表示绑定链递归让表达式的方程理论。
2010-12-22 cs.PL
Proceedings Seventh International Workshop on Verification and Program Transformation
本卷包含第七届验证和程序转换国际研讨会(VPT 2019)上提交的论文的最终和修订版,该研讨会于2019年4月2日在意大利热那亚举行,隶属于Programming 2019。
2019-08-16 cs.LO cs.PL
Towards a Semantics-Aware Transformation Toolchain for Heterogeneous Systems
在对异构计算平台进行编程时获得良好的性能对程序员提出了重大挑战。我们提出了一个程序转换环境,在Haskell中实现,其中架构不可知的科学C代码与语义注释转换成功能等效的代码更适合于给定的平台。转换步骤被形式化(和实现)为规则,当满足某些语法和语义条件时,可以触发这些规则。这些条件将由程序属性来满足,这些属性可以自动推断,或者作为源代码中的注释来声明。规则选择可以由从机器学习过程导出的逻辑来引导,该逻辑试图捕获运行时特性(例如,资源消耗或性能)受到转换步骤的影响。
2016-03-10 cs.PL
Unfolding in CHR
程序转换是一种有吸引力的技术,它可以提高运行时的效率,空间消耗和更普遍地优化给定的程序。本质上,它由一系列的语法程序操作,保持某种语义等价。大多数程序转换系统使用的基本操作之一是展开,它包括用过程调用的定义替换过程调用。虽然有大量的文献转换和展开的顺序程序,很少有论文已经解决了这个问题的并发语言,据我们所知,没有其他考虑展开的并行程序。本文定义了一个正确的可编程逻辑程序展开系统。我们定义了一个展开规则,证明了它的正确性,并讨论了一些条件,可以用来删除一个展开规则,同时保持程序的意义。我们证明了上述转换的汇合和终止性质。
2008-07-25 cs.PL
Pedagogy of Teaching Pointers in the C Programming Language using Graph Transformations
针对C语言指针教学难点,提出基于图变换的可视化教学法,利用Groove工具模拟指针操作,并通过研究评估其有效性。
2025-03-26 cs.PL
A general formal memory framework in Coq for verifying the properties of programs based on higher-order logic theorem proving with increased automation, consistency, and reusability
近年来,许多轻量级程序已被部署在关键领域,例如基于区块链技术的智能合约。因此,这类程序的安全性和可靠性应该由最可信的技术来保证。高阶逻辑定理证明是验证程序性质的最可靠的技术之一。然而,程序可以由不同的高级程序设计语言开发,并且可以同时支持不同的形式化验证规范(特别是在代码级)的通用的、可扩展的和可重用的形式存储器(GERM)框架目前不可用于验证程序的属性。因此,目前的工作提出了一个GERM框架,以填补这一空白。该框架模拟物理内存硬件结构,包括一个低层形式化内存空间,并提供一套简单、非侵入的应用程序编程接口和辅助工具,使用Coq同时支持不同的形式化验证规范。建议的GERM框架是独立的和可定制的,并完全在Coq中验证。我们还提出了一个扩展的Curry-Howard同构,表示为执行-验证同构(EVI),它结合了符号执行和定理证明,以提高自动化程度的高阶逻辑定理证明辅助工具。我们还实现了一个玩具功能的程序设计语言在一个广义代数数据库风格和形式解释器在Coq的基础上GERM框架。这些实现,然后演示了EVI的应用程序到一个简单的代码段。
2018-03-27 cs.PL
Verification of Imperative Programs by Constraint Logic Program Transformation
本文提出了一种基于约束逻辑程序变换(CLP)的方法来验证操作整数和数组的命令式程序的部分正确性。我们使用CLP作为一种元语言来表示命令式程序,它们的执行和它们的属性。首先,我们将命令式程序的正确性编码为CLP程序T定义的谓词“不正确”的否定。通过构造,“不正确”在T的最小模型中成立,当且仅当从初始配置执行prog最终在错误配置中停止。然后,我们对程序T应用一系列保持其最小模型语义的变换。这些转换是基于众所周知的转换规则,如展开和折叠,由适当的转换策略,如专业化和泛化。转换的目的是导出一个新的CLP程序TransfT,其中谓词“不正确”由以下定义:(i)事实“不正确”。'(在这种情况下prog是不正确的),或者由(ii)空子句集(在这种情况下prog是正确的)。在我们导出CLP程序使得(i)和(ii)都不成立的情况下,我们对变换进行了简化。由于问题是不可判定的,这个过程可能不会终止。我们通过例子表明,我们的方法可以应用在一个相当系统的方式,是适合自动化的程序验证领域的许多技术开发的程序转换。
2013-09-20 cs.LO cs.PL
Finite Countermodel Based Verification for Program Transformation (A Case Study)
自动程序验证和程序转换都是以程序分析为基础的。在过去的十年中,一些方法使用各种自动通用程序转换技术(部分演绎,专业化,超级编译)的计算系统的不可达性属性的验证被引入和演示。另一方面,基于语义的展开-折叠程序转换方法提出了各种各样的可达性任务,并试图解决它们,旨在改善被转换程序的语义树。这意味着可以使用一些通用的验证方法来加强程序转换技术。本文讨论了Turchin的超级编译方法中如何使用安全验证方法的有限反模型的问题。我们提取了一些超级编译子算法,试图解决可达性问题,并演示了使用外部countermodel查找器来解决一些问题。
2015-12-12 cs.PL cs.SE
Model Checking Race-freedom When "Sequential Consistency for Data-race-free Programs" is Guaranteed
针对无数据竞争程序的顺序一致性保证下如何验证所有SC执行无竞争的问题,提出对模型检测做少量修改即可有效验证无竞争特性,并在OpenMP并行化的C程序集上进行了探索。
2023-07-20 cs.DC cs.PL
Transformation Rules for Locally Stratified Constraint Logic Programs
本文提出了一组带否定的约束逻辑程序的转换规则。我们假设每一个程序都是局部分层的,因此,它有一个唯一的完美模型。我们给出了充分的条件,确保建议的一套转换规则保持完美的模型的程序。我们的规则扩展在某些方面的规则逻辑程序和约束逻辑程序已经考虑在文献中,特别是,他们包括一个规则展开一个条款相对于一个负文字。
2004-02-20 cs.LO cs.PL
Reverse Engineering from Assembler to Formal Specifications via Program Transformations
FermaT转换系统基于达勒姆大学、德蒙福特大学和Software Migrations Ltd.过去十六年进行的研究,是一个工业强度的形式转换引擎,在程序理解和语言迁移方面有许多应用。本文是一个案例研究,它使用自动化加上手动指导的转换和抽象转换为一个非常高层次的抽象规范的IBM 370汇编代码程序。
2001-05-04 cs.PL cs.SE
A Calculus for Language Transformations
在本文中,我们提出了一个演算表示算法的程序设计语言转换。我们给出了该演算的类型系统和操作语义,并证明了它是类型健全的。我们已经实现了我们的演算,我们证明了它的适用性与常见的例子在程序设计语言。由于我们的演算操纵推理系统,我们的工作原则上可以应用于逻辑系统。
2019-10-25 cs.PL
Proceedings Fourth International Workshop on Rewriting Techniques for Program Transformations and Evaluation
本卷包含2017年9月8日在英国牛津举行的第四届程序转换和评估重写技术国际研讨会(WPTE 2017)的正式会议记录,并与第二届计算和演绎形式结构国际会议(FSCD 2017)有关。
2018-02-16 cs.LO cs.PL
Verification of Java Bytecode using Analysis and Transformation of Logic Programs
逻辑编程(LP)范式中的最先进的分析器现在已经成熟和复杂。他们允许推断各种各样的全球性的属性,包括终止,资源消耗的界限等,这项工作的目的是自动转移的权力,这样的分析工具LP的分析和验证的Java字节码(JVML)。为了实现我们的目标,我们依赖于众所周知的元编程和程序专业化技术。更确切地说,我们建议部分评估的JVML解释器实现LP连同(LP表示)的JVML程序,然后分析剩余的程序。有趣的是,至少对于我们研究过的例子,我们的方法产生了原始JVML程序的非常简单的LP表示。这可以看作是从JVML到高级LP源代码的反编译。通过对这些剩余程序的推理,我们可以在CiaoPP系统中自动证明JVML程序的一些非平凡性质,如终止性,运行时无错误性,并推断其资源消耗的界限。我们不知道有任何其他系统能够验证Java字节码的这种高级属性。
2010-07-19 cs.PL
Automating the Diagram Method to Prove Correctness of Program Transformations
我们报告的自动化技术,以证明程序转换的正确性,在高阶程序演算,这可能允许递归让绑定,因为它们发生在功能程序设计语言。如果程序转换保持了程序的观察语义,那么它就是正确的。在我们的LRSX工具中,所谓的图方法是通过结合高阶元语言上的α重命名的统一、匹配和推理来自动化的,并且通过编码来自动化归纳证明到术语重写系统的终止问题中。我们解释的技术,我们说明了使用的工具,我们报告的实验。
2019-02-22 cs.LO cs.PL
One Tool, Many Languages: Language-Parametric Transformation with Incremental Parametric Syntax
我们提出了一种新的方法来构建源到源的转换,可以运行在多种程序设计语言,基于一种新的方式表示程序称为增量参数语法。我们在Cubix系统中的Haskell中实现了这种方法,并为C,Java,JavaScript,Lua和Python构建了增量参数语法。我们展示了一个运行在所有这些转换上的全程序重构工具,以及三个较小的转换,每个转换运行在几个转换上。我们的评估表明,(1)一旦编写了转换,几乎不需要为新语言配置它;(2)根据我们人类研究的参与者,以这种方式构建的转换输出可读代码,保留原始结构;(3)我们的转换仍然可以处理语言的角落情况,如编译器测试套件所验证的。
2018-10-01 cs.PL
Proceedings Third International Workshop on Rewriting Techniques for Program Transformations and Evaluation
本卷包含2016年6月23日在葡萄牙波尔图举行的第三届程序转换和评估重写技术国际研讨会(WPTE 2016)的正式会议记录,作为第一届计算和演绎形式结构国际会议(FSCD 2016)的卫星活动。该研讨会汇集了研究人员的程序转换,评估,和基于操作的程序设计语言语义,使用重写方法,以分享技术和最新发展,并交流思想,鼓励进一步激活在这一领域的研究。
2017-01-01 cs.LO cs.PL
Verification of Object-Oriented Programs: a Transformational Approach
我们表明,验证面向对象的程序,通过断言的方法,可以实现在一个简单的方式,通过利用一个语法导向的转换,从面向对象的程序递归程序。这种转换表明自然的证明规则和它的正确性,帮助我们建立健全和相对完整的证明系统。困难之一是如何在断言语言中正确处理实例变量和别名。所讨论的程序设计语言支持数组、实例变量、失败和带参数的递归方法。
2011-11-08 cs.LO cs.PL
Transformations of Logic Programs with Goals as Arguments
我们考虑逻辑编程的一个简单扩展,其中变量可以在目标上变化,目标可以是谓词的参数。在这种语言中,我们可以编写以目标为数据的逻辑程序。我们给出了实际的证据表明,利用这种能力时,转换程序,我们可以提高程序的效率。我们提出了一套程序转换规则,扩展了熟悉的展开和折叠规则,并允许我们操纵的目标出现的谓词参数的条款。为了证明这些转换规则的正确性,我们形式化地定义了我们的扩展逻辑程序设计语言的操作语义。这个语义是LD-分辨率的一个简单变体。当适当的条件得到满足时,这种语义与LD-分辨率一致,因此,用我们的扩展语言编写的程序可以由普通的Prolog系统运行。我们的转换规则,以保持操作语义和终止。
2004-02-20 cs.LO cs.PL
Informal proceedings of the 32nd International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR 2022)
本卷是第32届基于逻辑的程序合成和转换国际研讨会的非正式会议录(LOPSTR 2022),于2022年9月21日至23日举行,作为混合(混合)会议,(在格鲁吉亚第比利斯的Ivane Javakhishvili Tbilisi State University -TSU)和虚拟,并与第24届声明式编程原理与实践国际研讨会(PPDP 2022)共同举办,作为2022年计算逻辑秋季峰会(CLAS 2022)的一部分。
2022-07-29 cs.LO cs.PL
Pre-proceedings of the 27th International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR 2017)
本卷是2017年10月10日至12日在比利时那慕尔举行的第27届基于逻辑的程序合成和转换国际研讨会(LOPSTR 2016)的预录,并与第19届声明式编程原理和实践国际研讨会(PPDP 2017)共同举办。在研讨会讨论后,论文将通过第二轮评审和选择的正式程序。
2017-08-31 cs.LO cs.PL
Proceedings of the Fourth International Workshop on Verification and Program Transformation
本卷包含2016年4月2日在荷兰埃因霍温举行的第四届验证和程序转换国际研讨会(VPT 2016)上提交的论文的修订版。该研讨会是欧洲软件理论与实践联合会议(ETAPS 2016)的一项活动。VPT研讨会的目的是提供一个论坛,来自程序转换领域和程序验证领域的人们可以卓有成效地交换意见,并对这两个领域之间的相互作用有更深入的了解。最近在这些领域发表的研究论文表明,相互作用是非常有益的,实际上是双向的。在一个方向上,在程序转换领域中开发的方法和工具,例如部分演绎,部分求值,折叠/展开转换和超级编译,都已成功地应用于系统的验证,特别是无限状态和参数化系统的验证。在另一个方向,在程序验证,如模型检验,抽象解释,SAT和SMT解决,自动定理证明,已被用来增强程序转换技术,从而使这些技术在实践中更强大和有用的方法。
2016-07-06 cs.PL cs.SE
Transformations of CCP programs
介绍了一个并发约束程序设计的转换系统。我们定义了合适的适用性条件的转换,保证输入/输出CCP语义也被保存时,区分死锁计算成功的,当考虑中间结果(可能)非终止计算。该系统允许我们优化CCP程序,同时保留其预期的含义:除了顺序声明性语言的通常好处外,并发程序的转换还可以消除通信通道和同步点,将非确定性计算转换为确定性计算,并节省计算空间。此外,由于转换系统保留了程序的死锁行为,它可以用于证明给定程序对一类查询的无死锁性。为了达到这个目的,有时应用我们的变换和专门化得到的程序wrt给定的查询,这样得到的程序是平凡的死锁自由。
2001-07-10 cs.AI cs.LO cs.PL
A Higher-Order Abstract Syntax Approach to Verified Transformations on Functional Programs
我们描述了一种方法来验证实现的转换功能的程序,利用高阶表示的语法。在这种方法中,使用遗传Harrop公式的逻辑指定变换。一方面,这些规范直接作为实现,是Lambda Prolog语言中的程序。另一方面,它们可以用作Abella系统的输入,该系统允许我们证明关于它们的属性,从而证明关于实现的属性。我们认为,这种方法是特别有效的实现转换,分析绑定结构。我们通过在Lambda Prolog中描述对这种结构敏感的类型化闭包转换和代码提升等转换的简洁编码,并通过展示如何使用Abella证明其正确性来做到这一点。
2016-01-23 cs.LO cs.PL
Combining Logic Programs and Monadic Second Order Logics by Program Transformation
本文提出了一种基于展开/折叠变换规则的程序合成方法,该方法可用于从一个后继者的弱一元二阶理论(WS 1 S)的公式导出可终止的确定性逻辑程序。这种综合方法也可作为WS_(1 S)封闭公式的判定过程的证明方法。我们应用我们的综合方法翻译CLP(WS 1 S)程序到逻辑程序,我们也使用它作为一种证明方法来验证无限状态系统的安全性。
2003-11-27 cs.LO cs.PL
Pre-proceedings of the 26th International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR 2016)
本卷是2016年9月6日至8日在英国苏格兰爱丁堡举行的第26届基于逻辑的程序合成和转换国际研讨会(LOPSTR 2016)的预录,与第18届声明式编程原理与实践国际研讨会(PPDP 2016)和第23届静态分析研讨会(SAS 2016)位于同一地点。在研讨会讨论后,论文将通过第二轮评审和选择的正式程序。
2016-09-01 cs.LO cs.PL
Transformations of Logic Programs on Infinite Lists
我们考虑一个扩展的逻辑程序,称为ω-程序,可以用来定义谓词的无限列表。ω-程序允许我们指定反应系统的无限行为的性质,一般来说,无限事件序列的性质。ω-程序的语义是完美模型语义的扩展。我们提出了熟悉的展开/折叠规则的变体,可用于转换ω-程序。我们表明,这些新的规则是正确的,也就是说,他们的应用程序保持完美的模型语义。然后,我们概述了一个一般的方法,基于程序转换的ω-程序的性质验证。我们通过证明Buechi自动机和ω-正则语言的一些性质来展示我们基于转换的验证方法的强大功能。
2010-07-23 cs.LO cs.PL
Effect Handling for Composable Program Transformations in Edward2
Google(谷歌);University of Edinburgh(爱丁堡大学)
在程序设计语言社区中,代数效果和处理程序作为一种方便的、模块化的抽象出现,用于控制计算效果。他们已经发现了几个应用程序,包括并发编程,Meta编程,以及最近的概率编程,作为Pyro的Poutines库的一部分。我们调查使用的效果处理程序作为一个轻量级的抽象实现概率程序设计语言(PPLs)。我们将Edward2的现有设计解释为效果处理机制的意外实现,并扩展该设计以支持嵌套的可组合转换。我们证明,这使得简单的复杂的模型转换和推理算法的实现。
2018-11-15 cs.LG cs.PL stat.CO
Views, Program Transformations, and the Evolutivity Problem in a Functional Language
我们报告的经验,以支持多个视图的程序,以解决暴政的主导分解功能设置。对于表达式问题的经典例子,我们考虑Haskell中两种可能的架构。我们将展示如何使用Haskell Refactorer将一个视图转换为另一个视图,以及另一种方式。这种转换是自动化的,我们将讨论如何调整Haskell Refactorer以支持这种自动化转换。最后,我们比较我们的实施意见与一些文献。
2011-01-31 cs.PL cs.SE
Pre-proceedings of the 31st International Symposium on Logic-Based Program Synthesis and Transformation (LOPSTR 2021)
本卷构成了第31届基于逻辑的程序合成和转换国际研讨会的预录(LOPSTR 2021),于2021年9月7日至8日举行,作为混合(混合)会议,双方都亲自参加(在爱沙尼亚塔林的教师之家)和虚拟,并与第23届声明式编程的原则和实践国际研讨会(PPDP 2021)共同举办。在研讨会讨论后,论文将通过第二轮评审和选择的正式程序。
2021-08-31 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
Analysis and Transformation of Constrained Horn Clauses for Program Verification
本文综述了最近的工作应用分析和转换技术,起源于约束逻辑编程(CLP)领域的问题,验证软件系统。我们提出了基于专业化的技术翻译验证问题,为不同的程序设计语言,并在一般的软件系统,到满足性问题的约束霍恩条款(CHCs),一个术语,已成为流行的验证领域,指CLP程序。然后,我们描述了静态分析技术的CHCs,可用于推断相关的程序属性,如循环不变。我们还概述了一些转换技术的基础上专业化和折叠/展开规则,这是有用的,以提高CHC可满足性工具的有效性。最后,我们讨论了应用这些技术的未来发展。
2021-08-02 cs.LO cs.PL
Learning Syntactic Program Transformations from Examples
UFCG(坎皮纳联邦大学);UC Berkeley(加州大学伯克利分校);University of Wisconsin-Madison(威斯康星大学麦迪逊分校);University of Washington(华盛顿大学);Microsoft(微软);University of Colorado Boulder(科罗拉多大学博尔德分校)
IDE,如Visual Studio,自动化常见的转换,如转换和提取方法重构。然而,扩展这些转换目录是复杂且耗时的。类似的现象出现在智能辅导系统中,其中教师必须编写描述“常见错误”的繁琐代码转换,以修复类似的学生提交的编程作业。我们提出REFAZER,自动生成程序转换的技术。REFAZER建立在这样的观察基础上,即开发人员执行的代码编辑可以用作学习转换的示例。示例编辑可能共享相同的结构,但涉及不同的变量和子表达式,这些变量和子表达式必须在正确的抽象级别的转换中进行泛化。为了学习转换,REFAZER利用最先进的编程方法,使用以下关键组件:(a)用于描述程序转换的新型域特定语言(DSL),(b)用于在DSL中合成转换的域特定演绎算法,以及(c)用于对合成转换进行排名的函数。我们在两个域中实例化和评估REFAZER。首先,给出了学生用来修复不正确的编程作业提交的编辑的例子,我们学习了可以修复其他学生提交的类似错误的转换。在我们对720名学生执行的4个编程任务进行的评估中,我们的技术帮助87%的学生修复了不正确的提交。在第二个域中,我们使用开发人员对同一项目应用的重复编辑来合成程序转换,该程序转换将这些编辑应用到代码中的其他位置。在我们对来自3个C#开源项目的59个重复编辑场景进行的评估中,REFAZER在83%的情况下学习了预期的程序转换。
2016-08-31 cs.LG cs.PL cs.SE
Neural Architecture Search as Program Transformation Exploration
University of Edinburgh(爱丁堡大学)
提高深度神经网络(DNN)的性能对编译器和神经架构搜索(NAS)社区都很重要。编译器应用程序转换以便利用硬件并行性和存储层次结构。然而,合法性问题意味着他们未能利用神经网络的自然鲁棒性。相比之下,NAS技术通过诸如卷积的分组或检查之类的操作来改变网络,从而利用DNN的弹性。在这项工作中,我们表示这样的神经架构操作程序转换的合法性取决于一个概念的代表能力。这允许它们与现有的转换组合成统一的优化框架。这种统一使我们能够将现有的NAS操作表示为更简单的转换的组合。至关重要的是,它允许我们生成和探索新的张量卷积。我们在TVM中对组合框架进行了原型设计,并能够在不同的DNN中找到优化,从而显着减少推理时间-在大多数情况下超过3 $\times$。此外,我们的计划大大减少了NAS搜索时间。代码位于~ \href{https://github.com/jack-willturner/nas-as-program-transformation-exploration}{this https url}。
2021-02-12 cs.LG cs.PL
Checking Robustness Between Weak Transactional Consistency Models
对数据库的并发访问通常封装在事务中,以便能够与其他并发计算隔离并对故障具有弹性。现代数据库为事务提供了各种语义,对应于一致性和可用性之间的不同权衡。由于较弱的一致性模型提供更好的性能,因此一个重要的问题是调查给定程序所需的最弱一致性级别(以满足其规范)。作为处理这个问题的一种方式,我们调查的问题,检查是否一个给定的程序具有相同的一组行为时,更换一个较弱的一致性模型。这种被称为鲁棒性的特性通常意味着在削弱一致性时保留程序的任何规范。我们专注于一致性模型的鲁棒性问题,这是弱于标准的串行化,即因果一致性,前缀一致性,快照隔离。我们发现,检查这些模型之间的鲁棒性是多项式时间减少到一个状态可达性问题下的串行化。我们使用这种减少也得到一个务实的证明技术的基础上,利普顿的减少理论,允许证明程序的鲁棒性。我们已经将我们的技术应用于几个具有挑战性的应用程序,从分布式系统和数据库的文献。
2021-01-22 cs.LO cs.PL
Proceedings of the First Workshop on Program Transformation for Programmability in Heterogeneous Architectures
本卷包含PROHA 2016的会议记录,这是2016年3月12日在西班牙巴塞罗那举行的第一次关于异构体系结构中可编程性的程序转换的研讨会,作为CGO 2016的附属研讨会,第14届代码生成和优化国际研讨会。开发和维护异构体系结构的高性能应用程序和库,同时保留其语义并具有合理的效率是一项耗时的任务,通常只有专家才有可能。它通常需要手动调整顺序的、与平台无关的代码以适应不同的基础设施,并保持所有这些基础设施中的更改同步。这些程序修改任务成本高且容易出错。当然,帮助并在可能的情况下自动化这种转换的工具是非常感兴趣的。然而,这样的工具可能需要显著的推理和知识处理能力,包括例如能够处理一段代码的语义的机器可理解的描述;在它们适用的上下文中执行程序变换;使用策略来标识导致最佳结果代码的变换序列;以及其他。
2016-03-10 cs.DC cs.PL cs.SE
Towards a General Framework for Formal Reasoning about Java Bytecode Transformation
程序转换引起了广泛的兴趣,因为它用于多种目的:改变程序的语义、向程序添加功能或执行优化。在本文中,我们专注于程序转换在字节码级别。由于这些转换可能会引入错误,因此我们的目标是提供一种正式的方法来验证更新并确定其正确性。提出的形式化框架定义了更新的形式语义,作为静态验证的基础,并提出了一种基于Hoare三元组和最弱前提演算的字节码转换行为推理方案
2013-07-31 cs.LO cs.PL