Modular Type-Safety Proofs using Dependant Types
虽然代码抽象和重用的方法已经广泛应用并得到了很好的研究,但证明抽象和重用的方法仍然在不断涌现。我们考虑使用依赖类型为这个目的,介绍了一个完全机械的方法证明组合。我们发现,一般的技术抽象算法的数据结构自然转化为抽象证明。我们首先介绍一种由一系列较小的语言组件组成的语言,这些组件通过Malcom(1990)的标准技术联系在一起。我们继续给每个语言组件的类型保持的证明,并表明,在组成的语法数据结构的基本思想可以适用于它们的语义。
2012-08-02 cs.PL
Modularity, Code Specialization, and Zero-Cost Abstractions for Program Verification
本文提出一组基于语言的技术,在 F* 的 Low* 工具链中实现模块化高层验证与零开销低层代码生成,成功将 HACL* 扩展至十万行以上,并通用捕获流式 API 语义,修复了 Python 参考实现中的多个 CVE 漏洞。
2023-07-06 cs.PL
Specification Mining for Smart Contracts with Automatic Abstraction Tuning
智能合约是根据特定协议管理数字资产的程序,例如表示拍卖规则。理解智能合约的可能行为是困难的,这使得开发、审计和攻击的事后分析变得复杂。本文介绍了智能合约的第一个规范挖掘技术。我们的技术从区块链上记录的合约执行中提取智能合约的可能行为,并将其表示为有限自动机。一种新的依赖分析允许我们将独立的交互与合同分开。例如,我们的技术根据可配置的指标自动调整自动机构造的抽象,以最大限度地提高可读性或精度。我们为以太坊区块链实现了我们的技术,并在几个现实世界的合同上评估了它的可用性。
2018-07-20 cs.PL cs.SE
A simple abstraction of arrays and maps by program translation
我们提出了一种处理数组的程序的静态分析方法,数组程序的语义和纯标量操作的语义之间有伽罗瓦连接。实现它的最简单的方法是通过自动地将数组程序语法转换为标量程序,然后使用任何静态分析技术(抽象解释、加速、谓词抽象等)分析标量程序。.).由此获得的标量不变量被翻译回原始程序作为普遍量化的数组不变量。我们说明了我们的方法上的各种例子,导致“荷兰旗”算法。
2015-06-12 cs.LO cs.PL
TensorIR: An Abstraction for Automatic Tensorized Program Optimization
Shanghai Jiao Tong University(上海交通大学);Carnegie Mellon University(卡内基梅隆大学);OctoML(OctoML公司);University of Washington(华盛顿大学);UC Berkeley(加州大学伯克利分校);Amazon Web Services(亚马逊云科技)
在各种设备上部署深度学习模型已经成为一个重要的课题。硬件专业化的浪潮为多维张量计算带来了各种各样的加速原语。这些新的加速原语,以及新兴的机器学习模型,带来了巨大的工程挑战。在本文中,我们提出了TensorIR,一个编译器抽象优化程序与这些张量计算原语。TensorIR概括了现有机器学习编译器中使用的循环嵌套表示,将张量计算作为一等公民。最后,我们在我们的抽象之上构建了一个端到端框架,以自动优化给定张量计算原语的深度学习模型。实验结果表明,TensorIR编译自动使用给定硬件后端的张量计算原语,并提供与跨平台的最先进手动优化系统竞争的性能。
2022-10-27 cs.AI cs.LG cs.PL
Multi-Threaded Software Model Checking via Parallel Trace Abstraction Refinement
LMU Munich(慕尼黑大学)
本文提出了一种基于并行轨迹抽象细化的多线程软件模型检查方法,通过利用多核CPU提升验证效率,优于传统顺序方法和DSS技术。
2026-01-15 cs.LO cs.PL cs.SE
A Modular Framework for Stack-Heap and Value Abstractions (Extended Version)
Ca’ Foscari University of Venice(威尼斯大学)
本文针对高级静态程序分析中不同编程语言内存管理问题,提出并形式化通用内存框架,基于抽象解释理论,通过分裂状态抽象将值与内存分析分离到模块化域,可支持多种语言行为,独立组合不同分析。
2026-07-20 cs.PL cs.SE
Modular, Fully-abstract Compilation by Approximate Back-translation
本文提出通过近似反向翻译技术,解决源语言表达能力不足时编译器完全抽象性证明的难题,并在STLC到ULC编译器上实现首个Coq机械化证明。
2017-10-24 cs.PL
Abstract Compilation as Abstraction of Operator Semantics, applied to Cost Analysis
Universidad Politécnica de Madrid(马德里理工大学);IMDEA Software Institute(IMDEA软件研究所);Spanish Council for Scientific Research (CSIC)(西班牙国家研究委员会);Computer Science Laboratory of Sorbonne University (LIP6)(索邦大学计算机科学实验室);STMicroelectronics(意法半导体)
该研究提出算子语义与抽象编译框架,将其应用于静态代价分析,开发出支持通用函数未知量等的最优递归提取技术,提升了代价分析的可靠性与精确性。
2026-08-11 cs.LO cs.PL
Improving Thread-Modular Abstract Interpretation
我们给线程模块化的非关系值分析作为本地跟踪语义的抽象。语义以及分析制定的全球不变量和副作用的约束系统。我们表明,概括的静态分析仪Goblint提供的分析,以及一个自然的改进安托万Miné的方法,可以得到这个一般计划的实例。我们表明,这两个分析是无与伦比的w.r.t.精确度,并提供在精确度方面都有所改进的细化。我们还报告了一个初步的实验比较给定的分析一套有意义的基准。
2021-08-17 cs.PL
Galois Transformers and Modular Abstract Interpreters
静态分析器的设计和实现已经变得越来越系统化。然而,对于一个给定的语言或分析功能,它往往需要繁琐和容易出错的工作,以实现分析器,并证明它的声音。简而言之,静态分析特性和它们的可靠性证明不能很好地组合,导致在实现和元理论中缺乏重用。我们通过引入伽罗瓦变换器解决了系统地构建静态分析器的问题:单子变换器传输伽罗瓦连接属性。与一个单子解释器相配合,我们定义了一个单子转换器库,这些转换器实现了经典分析参数(如上下文、路径和堆(入)敏感性)的构建块。此外,这些可以独立于被分析的语言组合在一起。重要的是,Galois Transformer可以被证明是可靠的,使其成为可重用的分析组件。随着新的分析特征和抽象的开发和混合,可靠性证明不需要重建,因为单子Transformer堆栈的组成凭借其成分是可靠的。伽罗瓦变换为程序分析的可重用和可组合元理论提供了一个可行的基础。最后,这些伽罗瓦变换器将分析设计和实现中的抽象级别转移到非专业人员能够在多个参数上合成声音分析器的级别。
2015-10-05 cs.PL
Clustered Relational Thread-Modular Abstract Interpretation with Local Traces
我们构建了新的线程模块化分析,跟踪关系信息的潜在重叠集群的全局变量-考虑到他们是由共同的互斥锁保护。我们提供了一个框架,系统地提高聚类关系分析的精度,通过分裂控制位置的基础上抽象的本地痕迹。作为一个实例,我们获得了动态线程创建和连接的分析。有趣的是,为全局变量跟踪较少的关系信息可能会导致更高的精度。我们考虑一类包含许多弱关系域的2-可分解域(例如,八角形)。对于这些域,我们证明,已经达到最大精度的集群的大小最多为2的全局。
2023-01-16 cs.PL
Trace Abstraction Modulo Probability
我们提出了跟踪抽象模概率,一种证明技术,用于验证概率程序的高概率精度保证。我们的证明overapproximate使用失败自动机,有限状态自动机,上限未能满足目标规范的概率的程序痕迹集。我们自动证明建设减少概率推理逻辑推理:我们使用程序合成方法来选择公理的采样指令,然后应用克雷格插值证明,痕迹失败的目标规格只有一个小的概率。我们的方法处理程序未知的输入,参数化分布,无限的状态空间,和参数化规格。我们评估我们的技术的一系列随机算法从差分隐私文献和超越。据我们所知,我们的方法是第一个自动建立这些算法的准确性。
2018-10-29 cs.PL
On Modular and Fully-Abstract Compilation -- Technical Appendix
安全编译研究生成与源级别组件一样安全的目标级别组件的编译器。在定义安全编译器时,完全抽象是得到最广泛证明的属性。一个编译器是模块化的,如果它允许不同的组件独立编译,然后连接在一起形成一个完整的程序。不幸的是,许多现有的非类型化机器码的完全抽象编译器不是模块化的。因此,虽然完全抽象的编译组件对于恶意攻击者来说是安全的,但如果它们相互链接,那么生成的组件可能会变得容易受到攻击。本文研究如何设计模块化的、完全抽象的编译器。它首先分析了编译程序链接在一起时产生的攻击,确定了由于链接造成的安全威胁。然后,它定义了一个编译器,从一个基于对象的语言与方法调用和动态内存分配,以非类型化的汇编语言扩展与内存隔离机制。本文提供了一个证明草图,所定义的编译器是完全抽象和模块化的,所以它的输出可以连接在一起,而不会引入安全违规。
2016-04-18 cs.PL
Abstraction Refinement Guided by a Learnt Probabilistic Model
设计一个有效的静态程序分析的核心挑战是找到一个好的程序抽象--一个只保留与给定查询相关的细节的抽象。在本文中,我们提出了一种新的方法来自动找到这样的抽象。我们的方法使用悲观策略,可以选择使用概率模型的指导。我们的方法适用于参数静态分析中实现的数据库,是基于反例指导的抽象细化。对于每个未尝试的抽象,我们的概率模型提供了成功的概率,而抽象的大小提供了其成本的估计,在分析时间。结合这两个指标,概率和成本,我们的细化算法选择一个最佳的抽象。我们的概率模型是Erdos-Renyi随机图模型的一个变体,它可以通过我们所说的超参数进行调整。我们提出了一种方法来学习这些超参数的好值,通过观察过去运行的分析现有的代码库。我们评估我们的方法对Java程序的对象敏感的指针分析,两个客户端分析(PolySite和Downcast)。
2015-11-10 cs.PL cs.SE
Modular Synthesis of Divide-and-Conquer Parallelism for Nested Loops (Extended Version)
我们提出了一种自动生成分治并行实现顺序嵌套循环的方法。我们关注一类遍历只读多维集合(列表或数组)并计算这些集合上的函数的循环。我们的方法是模块化的,因为内部循环嵌套被抽象出来,产生一个更简单的循环嵌套并行化。然后,循环嵌套的汇总版本被并行化。本文所解决的主要挑战是,要执行每一步中所需的代码转换,循环嵌套可能必须(自动)增加额外的计算,以使抽象和/或并行化任务成为可能。我们提出的理论结果来证明我们的模块化方法的正确性,和自动化的算法解决方案。实验结果表明,我们的方法可以并行化高度非平凡的循环嵌套有效。
2019-04-01 cs.PL
Scheduling Constraint Based Abstraction Refinement for Multi-Threaded Program Verification
有界模型检验是并发程序自动验证的有效方法之一。然而,编码所有可能的交织往往需要一个庞大而复杂的公式,这大大限制了销售。提出了一种新的、有效的多线程程序验证的抽象求精方法。针对调度约束的精确编码往往导致计算公式庞大的问题,提出了一种基于\tsc的抽象细化方法,避免了BMC计算公式庞大而复杂的编码。此外,为了获得有效的精化,我们设计了两个基于图的算法在事件顺序图的反例验证和精化生成,它总是可以获得一个小而有效的精化约束。增强了两个约束为基础的算法,反例验证和细化生成,我们已经证明,我们的方法是健全的和完整的w.r.t.给定的线圈展开深度。在\svcompc基准测试上的实验结果表明,我们的方法是有前途的,并显着优于现有的最先进的工具。
2018-04-03 cs.PL
Automatic Termination Analysis of Programs Containing Arithmetic Predicates
对于带有算术谓词的逻辑程序,显示终止并不容易,因为整数的通常顺序并没有充分的根据。一种新的方法,很容易纳入TermiLog系统的自动终止分析,在这种情况下,显示终止。该方法包括以下步骤:首先,自动推导出表示整数值域的有限抽象域。在此基础上,对程序进行抽象解释.其结果是一个有限数量的原子抽象的答案查询,用于扩展查询映射对的技术。对于每个潜在非终止的查询映射对,猜测有界(整数值)终止函数。如果遍历该对减少了终止函数的值,则建立终止。简单的函数通常足以满足每个查询映射对,这使我们的方法比传统方法更有优势,传统方法对所有循环使用单个终止函数,这必然会更复杂,更难自动猜测。值得注意的是,McCarthy的91函数的终止可以使用我们的方法自动显示。总之,所提出的方法是基于结合的查询映射对的技术的整数的有限抽象,并且基本上是能够划分为几种情况下,这样一个简单的终止功能足以为每种情况下的终止证明。因此,证明终止的整个过程可以在TermiLog和类似系统的框架内自动完成。
2000-11-23 cs.PL
Some Issues on Incremental Abstraction-Carrying Code
抽象承载代码(ACC)最近被提出作为用于证明承载代码(PCC)的框架,其中代码供应商提供程序连同抽象(或程序的抽象模型),其有效性需要遵守预定义的安全策略。因此,抽象起到了安全证书的作用,其生成(和验证)由定点分析器自动执行。PCC的现有方法是在消费者读取并验证整个程序w.r.t.以非增量的方式一次获得完整的证书。在这篇摘要中,我们概述了增量ACC的主要问题。特别是,在逻辑编程的背景下,我们讨论了增量证书的生成和(可信)程序的不可信更新的增量检查算法的设计,即,当生产者提供先前验证的程序的修改版本时。通过更新,我们指的是对程序的任何任意更改,即,用新谓词扩展程序,删除现有谓词,并用新版本替换现有谓词。我们还讨论了每种更新如何影响增量扩展的准确性和正确性。
2007-01-17 cs.PL
Thread-modular Analysis of Release-Acquire Concurrency
我们提出了一个线程模块化的抽象解释(TMAI)技术来验证程序下的释放获取(RA)的内存模型的安全属性侵犯。我们的工作的主要贡献是:我们捕获的程序语句的执行顺序作为一个抽象的域,并提出了一个健全的上近似在这个域有效地原因RA并发。所提出的域在其应用中是通用的,并且捕获了作为抽象解释理论中的第一类特征的排序关系。特别地,域将并发程序中全局变量的修改序列的集合表示为偏序集合。在这种近似下,全局变量的较旧的sequenced-before存储被遗忘,并且仅保留每个变量的最新存储。我们建立我们提出的抽象的合理性,并在一个原型抽象解释器PRIORI中实现它们。PRIORI对现有的和具有挑战性的RA基准的评估表明,所提出的技术不仅在反驳方面具有竞争力,而且在验证方面也具有竞争力。与最近最先进的RA并发工具相比,PRIORI显示出更高的精度和更快的分析运行时间。
2021-08-17 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