Tracing sharing in an imperative pure calculus (Extended Version)
我们引入了一个类型和效果系统,一个强制性的对象演算,推断“共享”可能引入的表达式的评价,表示为一个等价关系之间的自由变量。这种在句法层面上对共享效应的直接表达使我们能够以自然的方式表达并概括文学中广泛使用的概念,特别是“独特性”和“借用”。此外,演算是“纯”的,因为约简只定义在语言术语上,因为它们直接编码存储。相对于使用全局辅助结构的行为上等效的标准模型,这种非标准执行模型的优点在于引用之间的可达性关系部分地通过作用域来编码。
2018-08-01 cs.PL
Enhanced sharing analysis techniques: a comprehensive evaluation
共享是D. Jacobs和A. Langen用于分析逻辑程序,导出有用的别名信息。众所周知,一个常用的核心技术,如共享与自由度和线性信息的集成,可以显着提高分析的精度。然而,许多其他关于细化域组合的建议已经流传多年。这些建议的一个共同特点是,它们似乎没有经过彻底的实验评估,即使是在预期的精度增益方面。在本文中,我们实验评估:帮助共享与明确的基础变量发现使用Pos,域的正布尔公式;明确的结构信息的合并;一个完整的实现减少产品的共享和Pos;重新排序的问题绑定在计算中的抽象MGU;增加一个新模式的原始建议,记录被认为是基础或自由的变量集;使用线性改进分析的改进方法;将共享与自由信息相结合,实现隐藏信息的恢复。最后,我们讨论的问题是否跟踪复合性允许计算更多的共享信息。
2004-01-26 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
Abstract Environment Trimming
本文提出受编译器优化启发的变量修剪等技术,在不影响精度的前提下提升逻辑程序共享分析效率,实验显示显著加速且超时模块减半。
2024-08-19 cs.PL
Bound Analysis of Imperative Programs with the Size-change Abstraction (extended version)
大小变化抽象(SCA)是一种重要的程序可终止性分析抽象,已在许多函数程序和逻辑程序的工具中得到成功实现。在本文中,我们证明了SCA也是一个非常有效的抽象域的约束分析的命令式程序。我们已经实现了一个基于SCA的命令式程序绑定分析工具。我们抽象程序的路径和上下文相关的方式,这使得我们的工具,以有效地分析现实世界的程序。我们的工作表明,SCA捕获了许多以前的终止和绑定分析的基本思想,并超越了概念上更简单的框架。
2012-03-23 cs.PL
Optimal matching for sharing and linearity analysis
本文研究逻辑程序静态分析中共享与线性属性的最优抽象匹配算子,提出$\mathtt{ShLin}^\omega$域上的最优算子,可实例化用于$\mathtt{ShLin}^{2}$和$\mathtt{Sharing} \times \mathtt{Lin}$域。
2024-06-23 cs.LO cs.PL
On Propositional Program Equivalence (extended abstract)
本文从带保护的Kleene代数与测试的视角,讨论命题程序等价性的最新进展,该等价性在抽象语句语义后可判定且实践可行。
2025-07-10 cs.PL
Abstract Interpretation with Infinitesimals: Towards Scalability in Nonstandard Static Analysis (Extended Version)
为了验证混合系统,我们扩展了抽象解释。摘要抽象在混合系统的验证方法中扮演着重要的角色,但对于常微分方程定义的连续动态的抽象需要特别注意。我们应用Cousot和Cousot的抽象解释框架的混合动力系统,几乎是因为它是,通过把连续动态无穷小离散跳跃的无限迭代。这种扩展遵循了Suenaga,Hasuo和Sekine最近的工作路线,其中演绎验证扩展为混合系统:1)为无穷小值引入常数dt; 2)采用Robinson的非标准分析(NSA)来定义数学上严格的语义。我们的理论结果包括健全性和终止通过统一加宽运营商和我们的原型实现成功地验证了一些基准的例子。
2015-11-03 cs.PL
Decomposing Non-Redundant Sharing by Complementation
求补是约化积运算的逆运算,是一种系统地寻找抽象域的最小分解的技术。File'和Ranzato通过引入一种计算补数的简单方法来推进现有技术。作为一个应用,他们考虑了从Jacobs和Langen的集合共享域SH中通过互补来提取对共享域PS。然而,由于这个操作的结果仍然是SH,他们得出结论,PS太抽象了。在这里,我们表明,这一结果的来源在于不与PS,但与SH,更准确地说,与SH中包含的冗余信息相对于地面依赖性和对共享。事实上,如果SH的非冗余版本PSD代替SH,则获得适当的分解。为了建立PSD的结果,我们定义了一个一般模式的子域SH,包括PSD和DEF的特殊情况。这揭示了PSD的结构,并揭示了Def和PSD之间自然但意想不到的联系。此外,我们证实的索赔,互补本身是不足以获得真正的最小分解域。这个问题的正确解决方案是首先通过计算域相对于可观察行为的商来去除冗余,然后才通过互补来分解它。
2001-01-23 cs.PL
Extended abstract: Type oriented programming for task based parallelism
编写并行代码是困难的,并且在抽象和性能之间表现出基本的权衡。设计用于简化并行性复杂性的高级语言抽象做出了某些影响性能和可伸缩性的假设。另一方面,低级语言提供了许多优化的机会,需要深入的知识和程序员考虑并行性的棘手细节。需要一种方法,可以弥合差距,并提供编程的便利性和控制和优化的机会。通过可选地用附加的类型信息装饰代码,程序员可以指导编译器做出某些决定,或者依赖于合理的默认选择。
2020-10-27 cs.PL
Lost in Abstraction: Monotonicity in Multi-Threaded Programs (Extended Technical Report)
并发系统中的单调性规定,在任何全局状态下,当新进程添加到该状态时,现存的系统操作仍然是可执行的。这个概念在多线程软件中不仅是自然和常见的,而且很有用:如果每个线程的内存是有限的,单调性通常保证安全属性验证的可判定性,即使在运行线程的数量未知的情况下。在本文中,我们表明,获得有限数据线程抽象的模型检验的行为可能与单调性不一致:谓词抽象某些广泛使用的单调软件的结果在非单调的多线程布尔程序的单调性是失去了抽象。其结果是,完善的健全和完整的安全检查算法变得不适用,事实上,安全检查原来是不可判定的无界线程布尔程序类。我们演示了如何将抽象程序修改为单调程序,而不影响非单调抽象的安全属性。这显着改进了早期通过过度逼近来强制单调性的方法。
2014-06-24 cs.PL
Symmetry-Aware Predicate Abstraction for Shared-Variable Concurrent Programs (Extended Technical Report)
谓词抽象是将有限状态模型检查器应用于主流语言编写的程序的关键使能技术。它已经非常成功地用于调试顺序系统级C代码。虽然模型检验最初是为分析并发系统而设计的,但很少有证据表明谓词抽象在共享变量并发软件中的富有成效的应用。本文的目的就是缩小这一差距。我们已经开发了一个可感知的谓词抽象策略:它考虑到C程序的复制结构,包括许多线程执行相同的过程,并生成一个布尔程序模板,其多线程执行健全overapproximates并发C程序。在此模板的模型检验并行实例化期间的状态爆炸现在可以通过利用对称性来吸收。我们已经实现了我们的方法中的SATABS谓词抽象框架,并证明其优越的性能在大范围的同步程序的替代方法。
2011-02-11 cs.PL
Variability Abstractions: Trading Precision for Speed in Family-Based Analyses (Extended Version)
软件产品线(SPL)的基于族(提升)的数据流分析能够分析所有有效的产品(变体),而无需显式生成任何产品。它只将公共代码库作为输入,该公共代码库对SPL的所有变体进行编码,并产生对应于所有变体的分析结果。然而,提升分析的计算成本仍然固有地取决于变体的数量(在最坏的情况下,其在特征的数量上是指数的)。对于大量的特征,提升分析可能成本太高,甚至不可行。在本文中,我们引入定义为伽罗瓦连接的变化抽象,并使用抽象的解释作为一种正式的方法,计算为基础的推导近似(抽象)解除分析SPL程序,这是健全的建设。此外,给定一个抽象,我们定义了一个语法转换,将任何SPL程序转换为它的抽象版本,这样,对抽象SPL的分析与对原始SPL的相应抽象分析相一致。我们实现了转换的工具,重配置器,面向对象的Java程序的家庭,并评估这种方法的实用性上的三个Java SPL基准。
2015-03-16 cs.PL
Demanded Abstract Interpretation (Extended Version)
我们考虑的问题,使表现力的静态分析器交互。正式的静态分析作为一种验证和缺陷查找工具越来越广泛地被采用,但即使有强大的云基础设施,在代码更改后也可能需要几分钟或几小时才能获得批分析结果。虽然现有的技术为某些类别的分析提供了一些需求驱动或增量方面,但我们所面临的根本挑战是为任意抽象解释器做这两件事。我们的技术,需要抽象的解释,电梯程序语法和分析状态的动态演变的图形结构,在该程序编辑,客户端发出的查询,和评估的抽象语义都是统一对待。我们的方法解决的关键困难是一般的增量计算技术的应用程序的复杂,循环依赖结构引起的抽象解释循环与扩大运营商。我们证明了理想的抽象解释元属性,包括健全性和终止,保留在我们的方法,并要求的分析结果是等于那些计算出的批处理抽象解释。实验结果表明,承诺的原型要求抽象的解释框架:通过结合增量和需求驱动的技术,我们的框架始终提供分析结果的交互速度,回答95%的查询在1.2秒内。
2021-04-06 cs.PL
Multiparty Dependent Session Types (Extended Abstract)
今天的程序比以往任何时候都更加分布式和并发,结构化通信是核心。由于缺乏并发性的正式规范/验证,构建和调试这样的程序是困难的。这项工作正式的第一个多方依赖的会话类型作为一个表现力和实用的类型纪律,执行通信协议。类型系统是在多线程$λ$ -演算的设置中制定的,其灵感来自于多角色逻辑,这是我们之前发现的经典逻辑的概括。我们证明了一种新的技术称为无死锁还原的合理性。类型系统的可靠性意味着通信的保真度和没有死锁。
2018-07-31 cs.PL
Linear Dependent Types for Domain Specific Program Analysis (Extended Abstract)
在本教程中,我将介绍如何组合线性和依赖类型可以用来描述高阶程序的不同属性。线性类型已被证明对表达函数的属性特别有用;依赖类型对描述程序在控制流方面的行为很有用。这两个想法很好地结合在一起,当一个人有兴趣分析的功能取决于程序的控制流的属性。我将通过复杂性分析和敏感性分析的例子来说明这些想法。我将通过讨论这种方法的一般性来结束本教程。
2013-06-28 cs.PL
Abstracting Abstract Control (Extended)
动态语言的优点也是它的缺点:运行时灵活性是以编译时可预测性为代价的。动态语言的许多特征,如闭包、延续、各种形式的反射和缺乏静态类型,使许多程序员感到高兴,而编译器编写人员、工具开发人员和验证工程师则感到遗憾。这些特性的动态性只是混淆了使用它们的程序的静态推理。因此,对动态语言的静态分析很少,而且很少是合理的。“抽象抽象机”(AAM)的方法来构建静态分析最近已被提出作为一种方法,以改善设计分析的困难,这样的语言功能。该方法,所谓的,因为它派生出一个功能的声音和可计算的近似程序的行为开始从抽象的机器语义的语言,提供了一个可行的方法来动态语言分析,因为所需要的是一个机器描述的解释器。原始的AAM配方产生有限的状态抽象,不能忠实地表示解释器的控制堆栈。最近的进展表明,高阶程序可以近似下推系统。然而,这些自动机理论模型要么在检查或修改控制堆栈的功能上崩溃。在本文中,我们解决的问题,使下推流分析域的动态语言功能。我们修改了抽象抽象机技术,以针对下推系统的更强的计算模型。在自动机理论的地方,我们只使用抽象的机器和记忆。作为案例研究,我们展示了该技术适用于闭包,垃圾回收,堆栈检查,和一流的可组合延续的语言。
2014-08-14 cs.PL
Experience Report: Smuggling a Little Bit of Coq Inside a CAD Development Context (Extended Abstract)
虽然形式化验证技术在关键任务软件的开发中得到了很好的应用,但在大多数其他类型的软件的生产中仍然很少见。我们分享我们的经验,一个形式化验证工具,如Coq可以是非常有用和实用的现成的软件开发的背景下- CAD特别是-至少在某些场合。重点是3个主要领域:可以在工业环境中使用Coq的因素; Coq可以提供优势的任务的一些典型示例;将Coq集成到标准开发过程中时需要克服的问题和一些非问题的示例。
2020-07-01 cs.PL
Extended Abstract: Towards a Performance Comparison of Syntax and Type-Directed NbE
本文旨在开发一个平台,直接比较依赖类型检查器中语法指导与类型指导的相等性检查方法,量化后者的性能开销并分析改进途径。
2025-09-16 cs.PL
Extended Abstract: Mutable Objects with Several Implementations
本研究介绍ACL2 8.6版本新增的attach-stobj特性,该特性支持为抽象stobj配置不同可执行操作且无需重新认证相关书籍与定理,同时给出了背景、用户概述及实现说明。
2025-07-25 cs.LO cs.PL
Crumbling Abstract Machines
用一个共享的构造(如let表达式)扩展了可达演算,使项的特殊表示成为可能:迭代的应用程序通过在它们中的任何两个之间引入共享点来分解,减少到应用程序只有值作为直接子项的情况。这项工作研究如何崩溃的条款表示的影响,设计和抽象的机器按值调用评估的效率。关于设计,它消除了对计算上下文进行编码的数据结构的需要,例如在环境中编码的应用堆栈和转储。关于效率,我们表明,没有减速,特别是澄清肯尼迪提出的一点,关于这种代表性的潜在效率低下。此外,我们证明,一切顺利地扩展到微妙的情况下,开放的条款,需要实施证明助手。在此过程中,我们还指出,延续传递样式转换(可能是我们的表示的替代方案)不会扩展到开放情况。
2019-07-13 cs.LO cs.PL
Parameterized Dataflow (Extended Abstract)
数据流网络应用于各种形式的流处理,例如用于多媒体数据的并行处理。图的描述,包括他们的点火行为,通常是非组合的,不适合单独编译。这篇文章考虑了一种带有类型和效果系统的Repllow语言,该系统捕获了演员的触发行为。该系统允许定义抽象化Actor触发率,支持Actor定义的定义和安全组合,其中触发率直到启动Cowllow图才被实例化。
2016-10-26 cs.DC cs.PL
Abstract String Domain Defined with Word Equations as a Reduced Product (Extended Version)
提出一种基于字方程与不等式刻画字符串区间的抽象域,将其定义为字符串属性半格上的简化积,并证明其构成格,用于分析 JavaScript 字符串程序属性。
2025-10-13 cs.FL cs.PL
Convergence in Infinitary Term Graph Rewriting Systems is Simple (Extended Abstract)
在这个扩展的摘要中,我们提出了一个简单的方法来收敛项图,使我们能够统一项图重写和无穷项重写。这种方法是基于偏序和度量的术语图。这些结构是无穷项重写中使用的相应结构的简单概括。我们将我们的简单方法与我们之前开发的更复杂的方法进行比较,并表明这种新方法在许多方面都更优越。唯一不利的财产,我们能够确定,即失败的弱度量和偏序收敛之间的充分对应,是通过采用强收敛纪律纠正。
2013-02-26 cs.LO cs.PL
An Abstract Domain for Heap Commutativity (Extended Version)
本文提出一种面向堆操作程序的抽象域,将具体堆程序的交换性验证转移到抽象数学模型上安全执行,并支持框架化与组合推理,已在 Coq 中完成机械化。
2024-11-25 cs.LO cs.PL
A Prolog-based Environment for Reasoning about Programming Languages (Extended abstract)
ECLAIR是一个基于Prolog的原型系统,旨在为程序设计语言分析和实现工具的研究、开发和评估提供一个功能完整的环境。在本文中,我们勾画了系统的总体结构,概述了其组件的主要方法和技术。我们还讨论了Prolog作为系统实现语言的适当性:除了突出其优点外,我们还指出了一些潜在的弱点,暗示了可能的解决方案。
2007-11-02 cs.PL cs.SE
Robust Hyperproperty Preservation for Secure Compilation (Extended Abstract)
我们映射的空间的可靠性标准的安全编译的基础上,在任意对抗性的情况下,我们称之为强大的超属性保存的超属性保存。为此,我们研究了几类超属性的保留,并为每个类提出了安全编译的等效“无属性”特征,通常更适合于证明。即使是我们最强的健全性标准,所有超属性的鲁棒保存,似乎可以实现简单的转换和证明使用上下文回翻译技术以前开发的显示完全抽象的编译。虽然证明不安全的超属性的鲁棒保存需要这种强大的上下文反向翻译技术,但为了鲁棒地保存安全超属性,将每个有限迹前缀翻译回源上下文似乎就足够了。
2017-12-20 cs.CR cs.PL
Abstracting Runtime Heaps for Program Understanding
现代编程环境提供了广泛的支持,检查,分析和测试程序的基础上的算法结构的程序。不幸的是,对在执行期间检查和理解运行时数据结构的支持通常受到更多限制。本文提供了一种通用的技术来抽象和总结整个运行时堆。我们描述了抽象堆模型和相关的算法,用于将具体堆转储转换为相应的抽象模型,以及用于合并,比较和计算抽象模型之间的变化的算法。抽象模型旨在强调有关基于堆的数据结构的高级概念,如形状和大小,以及堆结构之间的关系,如共享和连接。我们通过构建一个内存分析器来展示抽象堆模型的实用性和计算易处理性。然后,我们使用这个工具来检查,查明和纠正来自DaCapo的一套程序的内存膨胀的来源。
2012-01-06 cs.PL cs.SE
Implementing Binary Search Trees in GP 2 (Extended Abstract)
University of Liverpool(利物浦大学);University of York(约克大学)
本文在GP 2中实现了二叉搜索树,利用根图变换规则支持插入、删除和查询操作,论证了其时间复杂度与命令式语言中的二叉搜索树一致。
2026-01-07 cs.DS cs.PL
Formally Secure Compilation of Unsafe Low-Level Components (Extended Abstract)
我们提出了一个新的安全编译的正式标准,提供了强大的安全保证组件编写的不安全,低级语言与C风格的未定义行为。我们的标准超越了最近的建议,保护跟踪属性的一个单一的组件对敌对的情况下,在一个系统中的相互不信任的组件模型动态妥协。每个组件都受到保护,不受所有其他组件的影响,直到它接收到触发未定义行为的输入,导致它受到损害并攻击其余未受损害的组件。为了说明这个模型,我们展示了一个安全的编译链,一个不安全的语言与缓冲区,程序和组件,编译成一个简单的RISC抽象机与内置的划分。这个抽象机器提供的保护保证可以在机器代码级别使用软件故障隔离或基于标记的引用监控来实现。我们正在进行机器检查证明,表明这个编译器满足我们的安全编译标准。
2017-10-31 cs.CR cs.PL
Symbolic Abstract Heaps for Polymorphic Information-flow Guard Inference (Extended Version)
在用于信息流控制的可靠的面向对象程序分析领域中,很少有方法采用堆的流敏感抽象来实现隐式流的精确建模。为了应对这一挑战,我们提出了一种新的符号抽象方法,用于在类Java程序中对堆进行建模。我们使用一个无存储的表示,参数化的家庭之间的关系的参考,提供不同程度的精度,根据用户的喜好。这使我们能够自动推断多态信息流警卫的方法,通过一个符号有限状态系统的可达性分析。我们用三个不同的关系族实例化堆抽象。我们证明了我们的方法的合理性,并通过使用IFSpec基准测试和现实生活中的应用程序与每个实例化堆域获得的精度和可扩展性进行比较。
2022-11-07 cs.CR cs.FL cs.PL
Abstract Family-based Model Checking using Modal Featured Transition Systems: Preservation of CTL* (Extended Version)
变量系统允许通过使用特征(配置选项)标记变量功能来有效地构建许多自定义变量。在许多应用中,其质量保证和形式化验证至关重要。基于族的模型检验通过利用变量之间的共性,允许在单次运行中同时验证变分系统的所有变量。然而,它的计算成本仍然在很大程度上取决于变体的数量(通常是巨大的)。在这项工作中,我们将展示如何实现有效的基于家庭的模型检验的CTL* 的时间属性,使用可变性抽象和现成的(单系统)工具。我们使用变异抽象派生抽象的基于族的模型检验,其中的变异模型的变分系统被替换为一个抽象的(更小的)版本,称为模态特征的过渡系统,它保留了普遍的和存在的时间属性的满意度,在CTL* 表示。模态特征变迁系统包含两类变迁,分别称为may变迁和must变迁,它们分别由保守(过近似)抽象和它们的对偶(欠近似)抽象定义。可变性抽象可以与变量集合的不同划分相结合,以推断用于变分系统的合适的分而治之验证计划。我们说明了几个变分系统的这种方法的实用性。
2018-03-05 cs.LO cs.PL cs.SE
Verifying Asynchronous Event-Driven Programs Using Partial Abstract Transformers (Extended Manuscript)
我们解决的问题,分析异步事件驱动的程序,并发代理通过无界消息队列进行通信。这类程序的安全验证问题是不可判定的。在本文中,我们提出了一种技术,结合了有界探索的收敛性测试:如果序列的某些抽象的可达状态,增加队列界限k,收敛,我们可以证明任何属性的程序,是由抽象保存。如果抽象状态空间是有限的,则收敛是有保证的;挑战在于捕捉它发生的点k_max。我们进一步证明了如何简单的不变量制定的具体域可以用来消除虚假的抽象状态,否则会阻止序列收敛。我们已经实现了我们的技术的P程序设计语言的事件驱动程序。我们的实验表明,序列的抽象往往完全自动收敛,在困难的情况下,最小的设计师支持的形式顺序可证明的不变量,这发生在一个值的k_max足够小,让该方法在实践中取得成功。
2019-05-24 cs.FL cs.LO cs.PL
Multirole Logic (Extended Abstract)
我们确定多角色逻辑作为一种新形式的逻辑,其中合取/析取被解释为一个超滤的幂集的一些基本的设置(角色)和概念的否定是广义的自同态在这个基本的设置。我们形式化的多角色逻辑(MRL)和线性多角色逻辑(LMRL)的经典逻辑(CL)和经典线性逻辑(CLL)的自然推广,分别,也提出了一个过滤器为基础的解释直觉主义的多角色逻辑。在为MRL和LMRL建立的各种元性质中,我们得到了一个称为多方割消元的性质,它指出每个包含一个或多个序列的割(作为包含恰好两个序列的(二元)割的推广)都可以被消元,从而推广了Gentzen关于割消元的著名结果.
2017-03-19 cs.DC cs.LO cs.PL