Towards Efficient Abstractions for Concurrent Consensus
一致性是并发和分布式编程中经常出现的问题。我们提出了一种程序设计语言,具有简单的语义和内置的支持共识的形式进行通信的事务。我们激励需要这样一个结构的一个典型的例子,广义共识,可以自然地编码在我们的语言。然后,我们专注于实现的挑战,可以有效地运行这样的程序。我们建立了一个体系结构,以评估不同的实现方案,并使用它来实验性地评估运行时性能。这是现实的程序设计语言支持共识的研究项目的基础。
2013-05-07 cs.DC cs.PL
Event Synchronization by Lightweight Message Passing
并发ML的事件和事件组合子促进了具有一流同步抽象的模块化并发编程。这些抽象的标准实现依赖于底层语言中对第一类延续的相当复杂的操作。在本文中,我们提出了一个轻量级的实现这些抽象的并发Haskell,一种语言,已经提供了一阶消息传递。我们实现的核心是一个新的分布式同步协议。与以前的几个翻译并发语言的事件抽象相比,我们仍然忠实于事件和事件组合子的标准语义,例如,我们保留了对称性的$\mathtt{choose}$表达选择性通信。
2008-05-27 cs.DC cs.PL
Visibility Reasoning for Concurrent Snapshot Algorithms
可见性关系是由Henzinger等人提出的,作为一种抽象,用于证明并发算法的线性化,从而获得模块化和可重用的证明。这与基于展示算法的线性化点的常规方法相反。在本文中,我们应用可见性关系开发模块化的证明三个优雅的并发快照算法的Jayanti。证明被签名分成抽象级别增加的组件;更高抽象级别的组件被共享,即,它们同时应用于所有三种算法。重要的是,界面特性在数学上捕捉到了Jayanti最初的直觉,而这些直觉以前只是非正式地给出的。
2021-11-08 cs.LO cs.PL
On Algebraic Abstractions for Concurrent Separation Logics
并发分离逻辑的特点是在并行组合和成帧时状态所有权的转移。支撑所有权转移的代数结构是部分交换幺半群(PCM)。现有的研究主要从逻辑的角度考虑所有权转移,而相对较少注意代数的考虑。本文利用保结构的部分函数(即,态射)之间的PCM,以及分离关系的相关概念。结构的态射是代数和范畴论中的标准概念,但在分离逻辑中还没有普遍使用过。分离关系是二元关系,它推广了不相交性,并描述了态射保持结构的输入。这两个抽象通过实现编写规范的简洁方式,通过提供在所有权转移下保留的线程状态的抽象视图,以及通过实现从现有PCM中构造新PCM的用户级构造,来促进验证。
2021-03-04 cs.LO cs.PL
A family of abstract interpretations for static analysis of concurrent higher-order programs
我们开发了一个框架,计算两个基本的分析并发高阶程序:(控制)流分析(CFA)和可能发生的并行分析(MHP)。我们特别关注的独特挑战所带来的不受限制的混合一流的延续和动态生成的线程。为了设置阶段,我们制定了一个具体的模型并发高阶程序:P(CEK*)S机。我们发现,这台机器的系统抽象的解释是能够计算流量和MHP分析。然而,仔细检查发现,MHP的精度很差。作为一种补救措施,我们采用了形状分析技术单例抽象动态产生的线程(而不是堆中的对象)。然后,我们表明,如果MHP分析是不感兴趣的,我们可以大大加快计算流分析单独崩溃线程交织与第二层的抽象。
2011-06-14 cs.PL
Go with the Flow: Compositional Abstractions for Concurrent Data Structures (Extended Version)
并发分离逻辑有助于显着简化并发数据结构的正确性证明。然而,这种证明中反复出现的问题是,由于复杂的共享和覆盖,在顺序设置中工作良好的数据结构抽象在并发设置中更难推理。为了解决这个问题,我们提出了一种新的方法来抽象区域的堆编码的数据结构不变到一个局部条件的每个节点。该条件可以取决于与在整个堆图上被计算为固定点的节点相关联的量。我们把这个量称为流量。流可以编码堆的结构属性(例如从根形成树的可达节点)以及数据不变量(例如排序)。然后,我们引入了流接口的概念,它表示依赖和保证堆区域施加在其上下文上,以保持局部流相对于全局堆不变。我们的主要技术成果是,这个概念导致了一个新的语义模型的分离逻辑。在这个模型中,流接口提供了一个通用的抽象机制来描述复杂的数据结构。这种抽象机制允许在各种各样的数据结构上推广的证明规则。为了证明我们的方法的多功能性,我们展示了如何扩展逻辑RGSep流接口。我们已经使用这种新的逻辑来证明非平凡并发数据结构的线性化和内存安全性。特别是,我们获得参数线性化证明并发字典算法,抽象的底层数据结构表示的细节。使用现有的分离逻辑提供的抽象机制,这些证明不能容易地表达。
2017-11-09 cs.DS cs.LO cs.PL
Automatic Termination Analysis of Programs Containing Arithmetic Predicates
对于带有算术谓词的逻辑程序,显示终止并不容易,因为整数的通常顺序并没有充分的根据。一种新的方法,很容易纳入TermiLog系统的自动终止分析,在这种情况下,显示终止。该方法包括以下步骤:首先,自动推导出表示整数值域的有限抽象域。在此基础上,对程序进行抽象解释.其结果是一个有限数量的原子抽象的答案查询,用于扩展查询映射对的技术。对于每个潜在非终止的查询映射对,猜测有界(整数值)终止函数。如果遍历该对减少了终止函数的值,则建立终止。简单的函数通常足以满足每个查询映射对,这使我们的方法比传统方法更有优势,传统方法对所有循环使用单个终止函数,这必然会更复杂,更难自动猜测。值得注意的是,McCarthy的91函数的终止可以使用我们的方法自动显示。总之,所提出的方法是基于结合的查询映射对的技术的整数的有限抽象,并且基本上是能够划分为几种情况下,这样一个简单的终止功能足以为每种情况下的终止证明。因此,证明终止的整个过程可以在TermiLog和类似系统的框架内自动完成。
2000-11-23 cs.PL
Learning Abstractions for Program Synthesis
许多示例引导的程序合成技术使用抽象来修剪搜索空间。虽然基于抽象的合成已经被证明是非常强大的,但领域专家需要提供一个合适的抽象领域,以及每个DSL构造的抽象Transformers。然而,提出有用的抽象可能是不平凡的,因为它需要领域专业知识和关于合成器的知识。在本文中,我们提出了一种新的技术,用于学习抽象,是有用的实例化一个一般的合成框架在一个新的领域。给定一个DSL和一小部分训练问题,我们的方法使用树插值来推断可重用的谓词模板,从而加快给定域中的合成。我们的方法还学习合适的抽象Transformers,通过解决某种二阶约束求解问题的数据驱动的方式。我们在一个名为ATLAS的工具中实现了所提出的方法,并在BLAZE元合成器的背景下对其进行了评估。我们的评估表明,(a)ATLAS可以从很少的训练问题中学习有用的抽象域和Transformers,(b)与手工制作的抽象相比,ATLAS学习的抽象允许BLAZE实现更好的结果。
2018-04-11 cs.PL
Lost in Abstraction: Monotonicity in Multi-Threaded Programs (Extended Technical Report)
并发系统中的单调性规定,在任何全局状态下,当新进程添加到该状态时,现存的系统操作仍然是可执行的。这个概念在多线程软件中不仅是自然和常见的,而且很有用:如果每个线程的内存是有限的,单调性通常保证安全属性验证的可判定性,即使在运行线程的数量未知的情况下。在本文中,我们表明,获得有限数据线程抽象的模型检验的行为可能与单调性不一致:谓词抽象某些广泛使用的单调软件的结果在非单调的多线程布尔程序的单调性是失去了抽象。其结果是,完善的健全和完整的安全检查算法变得不适用,事实上,安全检查原来是不可判定的无界线程布尔程序类。我们演示了如何将抽象程序修改为单调程序,而不影响非单调抽象的安全属性。这显着改进了早期通过过度逼近来强制单调性的方法。
2014-06-24 cs.PL
A simple abstraction of arrays and maps by program translation
我们提出了一种处理数组的程序的静态分析方法,数组程序的语义和纯标量操作的语义之间有伽罗瓦连接。实现它的最简单的方法是通过自动地将数组程序语法转换为标量程序,然后使用任何静态分析技术(抽象解释、加速、谓词抽象等)分析标量程序。.).由此获得的标量不变量被翻译回原始程序作为普遍量化的数组不变量。我们说明了我们的方法上的各种例子,导致“荷兰旗”算法。
2015-06-12 cs.LO cs.PL
A Specification of Open Transactional Memory for Haskell
transmandemory(TM)已经成为一个有前途的抽象并发编程替代基于锁的同步。然而,大多数TM模型只允许隔离的事务,这在事务必须在提交之前通过共享数据进行交互的多线程编程中是不够的。在本文中,我们提出了开放式事务存储器(OTM),一个编程抽象支持安全,数据驱动的可组合的内存事务之间的相互作用。这是通过放松事务之间的隔离来实现的,仍然确保原子性:不同事务的线程可以通过访问共享变量进行交互,但随后它们的事务必须一起提交-实际上,这些事务是透明合并的。该模型允许松耦合的交互,因为事务合并仅由对共享数据的访问驱动,而不需要预先指定参与者。在本文中,我们提供了一个规范的OTM的设置并发Haskell,表明它是一个保守的扩展,目前的STM抽象。特别是,我们提供了一个正式的语义,这使我们能够证明OTM满足\emph{opacity}标准。
2016-02-17 cs.PL
LAGC Semantics of Concurrent Programming Languages
形式化的、数学上严格的程序设计语言语义是设计允许对并发程序进行自动推理的逻辑和演算的基本先决条件。我们提出了一种新的模块化语义,旨在顺利对齐与演绎验证和并发程序的形式规范中使用的程序逻辑。我们的语义分离的表达式和语句的本地评估在一个抽象的,符号化的环境,从他们的组合成全球性的计算,在这一点上,他们是具体化。这使得可以逐步增加新的语言概念,而不需要修改框架。的基础是一个概括的概念,一个程序跟踪作为一个序列的不断发展的状态,我们丰富的事件描述符和尾随延续标记。这允许将调度约束从局部评估的级别推迟到全局组合阶段,其中在事件结构上的格式良好性谓词声明性地描述了广泛的并发模型。我们还说明了如何一个健全的程序逻辑和演算可以定义这种语义。
2022-02-24 cs.PL
A Thread-Local Semantics and Efficient Static Analyses for Race Free Programs
无数据竞争程序是一类重要的并发程序。在本文中,我们提供了一个框架,设计和证明的正确性数据流分析,针对这一类的程序。这些分析与早期文献中提出的“同步-CFG”分析具有相同的精神。为了实现这一点,我们首先提出了一种新的具体语义DRF程序,称为L-DRF,这是线程本地的性质-每个线程操作自己的副本的数据状态。我们表明,我们的语义抽象,使我们能够减少DRF程序的分析,顺序分析。这有助于将现有的顺序分析快速移植到DRF程序的合理和可扩展的分析中。接下来,我们将L-DRF参数化,将程序变量划分为原子访问的“区域”。区域参数化语义的抽象产生更精确的分析“区域种族”自由并发程序。我们实例化这些抽象设计高效的关系分析种族自由的程序,我们已经实现了一个原型工具,称为RATCOP。在基准测试中,RATCOP能够证明高达65%的断言,相比之下,我们的基线证明了25%。此外,在与最近的并发静态分析器的比较研究中,RATCOP快了5个数量级。
2020-09-06 cs.PL
PSM: Policy Synchronised Deterministic Memory
本文提出 Haskell 中的 PSM 类型上下文,通过策略协调并发访问,实现既支持命令式更新和并发共享、又保证无竞态确定性的内存抽象。
2025-06-18 cs.PL
Strict Linearizability and Abstract Atomicity
可线性化性是并发对象普遍接受的一致性条件。Filipović等人证明了线性化等价于观测精化。然而,线性化不允许并发对象与它们的客户端程序共享内存空间。我们表明,即使一个对象的客户端程序访问共享内存空间,而不受干扰的对象的方法的线性化(或观测细化)可以被打破。在本文中,我们提出了严格的线性化解除这一限制,可以确保客户端的痕迹和最终状态的等价性,即使在一个宽松的程序模型,允许客户端直接访问并发对象的状态。我们还研究了严格线性化的几个重要性质。在高抽象级别上,并发对象可以被视为抽象数据类型(ADT)的并发实现。我们还提出了一个正确的标准相关的ADT及其并发实现,这是线性化和数据抽象的组合,可以确保观察等价。我们还研究了它与严格线性化的关系。
2018-06-21 cs.PL cs.SE
Abstraction for Crash-Resilient Objects (Extended Version)
我们研究抽象的崩溃弹性并发对象使用非易失性存储器(NVM)。我们开发了一个库的正确性标准,这是健全的,以确保在这种设置的上下文细化,从而允许客户端的原因库的行为方面,他们的抽象规范,和库开发人员验证他们的实现对规范抽象远离特定的客户端程序。作为语义基础,我们采用了最近的NVM模型,称为持久顺序一致性,并扩展其语言和操作语义有用的规范结构。所提出的正确性标准考虑了客户端和库代码之间由于显式持久化指令而导致的与NVM相关的交互,以及库强制执行的调用策略。我们说明了我们的方法上的两个实现和规范的简单持久对象不同的原型持久性保证。我们的研究结果提供了第一种方法,在NVM下的正式组成推理。
2022-01-28 cs.PL
Delay-Bounded Scheduling Without Delay! (Extended Technical Report)
我们认为,在任意线程交织的异步并发程序的安全性分析的广泛问题。延迟有界的确定性调度,介绍了在以前的工作中,是一个有效的错误发现技术,以遏制与充分的调度不确定性的大成本。在本文中,我们首先提出了一种技术,以解除有限域变量程序的情况下的延迟界,从而增加了效率的错误检测的能力,证明安全的程序在任意线程交织。其次,我们展示了如何,结合谓词抽象,我们的技术可以反驳和验证安全属性的程序与无界的变量域,即使是无限的线程数。以前的工作已经建立,对于非平凡的并发例程,谓词抽象诱导一个高度复杂的抽象程序语义。然而,我们的技术,从来没有静态地构造一个抽象的参数化程序,它只需要一些抽象状态集在某些行动下被关闭,从而消除了对存在的抽象程序的验证算法的依赖。我们证明了我们的技术在以前的工作中使用的许多例子的效率,并展示其简单性相比,早期的方法在无限线程票锁协议。
2021-05-15 cs.PL
Explicit-Value Analysis Based on CEGAR and Interpolation
抽象、反例引导的精化和插值是基于谓词的程序分析成功的关键技术。这些技术还没有一起应用于显式值程序分析。我们提出了一种方法,将抽象和基于插值的细化集成到显式值分析中,即,一种程序分析,用于跟踪一组指定变量的显式值(精度)。该算法以抽象可达图为中心数据结构,采用路径敏感的动态精度调整方法。我们评估我们的算法的基准集的竞争软件验证2012年(SV-COMP'12),以表明我们的新方法是非常有竞争力的。此外,我们表明,结合我们的新方法与辅助谓词分析得分显着高于SV-COMP'12冠军。
2012-12-28 cs.PL cs.SE
Scheduling Constraint Based Abstraction Refinement for Multi-Threaded Program Verification
有界模型检验是并发程序自动验证的有效方法之一。然而,编码所有可能的交织往往需要一个庞大而复杂的公式,这大大限制了销售。提出了一种新的、有效的多线程程序验证的抽象求精方法。针对调度约束的精确编码往往导致计算公式庞大的问题,提出了一种基于\tsc的抽象细化方法,避免了BMC计算公式庞大而复杂的编码。此外,为了获得有效的精化,我们设计了两个基于图的算法在事件顺序图的反例验证和精化生成,它总是可以获得一个小而有效的精化约束。增强了两个约束为基础的算法,反例验证和细化生成,我们已经证明,我们的方法是健全的和完整的w.r.t.给定的线圈展开深度。在\svcompc基准测试上的实验结果表明,我们的方法是有前途的,并显着优于现有的最先进的工具。
2018-04-03 cs.PL
Context-Aware Separation Logic
针对并发分离逻辑中幽灵状态抽象导致推理足迹扩大的问题,本文提出Co(Co)SL及上下文规则,以支持更局部的推理,并在flow framework和证明检查器中验证高并发搜索树。
2024-08-03 cs.PL
Towards Algorithmic Synthesis of Synchronization for Shared-Memory Concurrent Programs
我们提出了一个框架,需要一个并发程序组成的不同步的进程,随着其全球并发行为的时间规范,并自动生成一个并发程序同步,确保正确的全球行为。我们的方法支持有限状态的并发程序组成的进程,可能有本地和共享变量,可能是直线或分支程序,可能正在进行或终止,并可能有程序初始化或用户初始化的变量。规约语言是命题计算树逻辑(CTL)的扩展,其使得能够容易地对控制和数据变量的安全性和活性属性进行规约。该框架还支持在不同的抽象和粒度级别上合成同步。
2012-07-04 cs.LO cs.PL
A Semantics Comparison Workbench for a Concurrent, Asynchronous, Distributed Programming Language
已经提出了许多高级语言和库,它们为并发、异步和分布式编程提供了新颖且易于使用的抽象。然而,实现它们的执行模型经常会随着时间的推移而改变--无论是为了提高性能,还是为了将它们扩展到新的语言功能--这可能会影响现有程序的行为和安全属性。SCOOP是一种并发面向对象编程的消息传递方法,它已经提出并实现了多个更改,并对其核心抽象的惯用用法产生了明显的影响。我们提出了一个语义比较工作台SCOOP与全自动和半自动的工具,用于分析和比较不同的执行模型或语义的程序的状态空间。我们证明了它的使用,在检查整个语义的属性的一致性,通过将其应用到一组代表性的程序,并突出了死锁相关的差异之间的主要执行模型的SCOOP。此外,我们证明了工作台的可扩展性,通过概括的形式化的执行模型,以支持最近提出的扩展分布式编程。我们的工作台是基于一个模块化的和参数化的图形转换语义中实现的GROOVE工具。我们将讨论如何利用图转换来原子地对复杂的语言抽象建模,如何使用模型的视觉和代数性质来确定合理性,并强调该方法如何应用于类似的语言。
2017-10-11 cs.DC cs.LO cs.PL
Rule-based High-level Hardware-RTL Synthesis of Algorithms, Virtualizing Machines, and Communication Protocols with FPGAs based on Concurrent Communicating Sequential Processes and the ConPro Synthesis Framework
虚拟化是对细节的抽象。算法和程序设计语言也提供了抽象。硬件和嵌入式系统的虚拟化在异构环境和网络中变得越来越重要,例如,分布式和材料集成传感器网络。通过引入直接在片上硬件中实现的虚拟化层,可以统一和唯一地访问各种硬件和低级协议的通信和数据处理。今天的硬件设计仍然是组件驱动的(如电路板),而不是将算法作为抽象层直接转换为硬件设计。程序和协议是算法,因此不要像传统的高级综合设计流程那样将它们作为设备处理!具有主导和复杂控制路径的复杂反应系统在SoC设计中发挥着越来越重要的作用。对并发性的主要贡献出现在控制路径级别。本文深入介绍了SoC设计方法,使用最高级别的综合ConPro编译器框架和面向过程的程序设计语言,提供了一个编程模型的基础上并发执行和通信的顺序进程(CCSP)与广泛的一组进程间通信原语。电路是在算法层面上建模和编程的,比组件驱动的设计更方便和自然。扩展的案例研究的智能通信协议路由器和先进的基于堆栈的处理器提供了一个可编程的虚拟化层显示和评估。两者一起用作部署在高密度传感器-致动器-网络中的智能节点架构,例如,用于材料集成智能系统。
2023-02-06 cs.AR cs.DC cs.PL
Polyvariant Program Specialisation with Property-based Abstraction
在本文中,我们表明,基于属性的抽象,一个既定的技术起源于软件模型检验,是一个灵活的方法,在标准的在线专业化算法控制程序专业化的多变量。专业化是一种程序转换,它根据限制其行为的给定约束来转换程序。多变量专业化是指生成同一程序代码的两个或多个专业化版本。在计算过程中,同一个程序点可以不止一次地达到,每种情况下都有不同的约束条件,而多变量专业化允许实现不同的专业化。基于属性的抽象使用属性的有限集合来定义谓词的抽象版本的有限集合,确保仅生成有限数量的专用版本。属性的特定选择对于多元性至关重要;太少的版本可能导致专业化不足,而太多的版本可能导致代码大小的增加,而没有相应的效率增益。使用实例,我们展示了基于属性的抽象专业化的灵活性,并讨论了其在控制流细化,验证,终止分析和基于维度的专业化。
2019-08-20 cs.LO cs.PL
A Concurrent Program Logic with a Future and History
细粒度的乐观并发程序仍然是一个悬而未决的问题。现代程序逻辑提供了抽象机制和组合推理原则来处理固有的复杂性。然而,它们的使用主要局限于纸张和纸张或机械化的证明。我们设计了一个新的分离逻辑,面向缺乏自动化。虽然本地推理是众所周知的自动化是至关重要的,我们是第一个展示如何保持这种局部性(i)推理归纳属性,而不需要幽灵代码,和(ii)推理计算历史的事后诸葛亮。我们在一个工具中实现了我们的新逻辑,并使用它来自动验证具有挑战性的并发搜索结构,这些结构需要归纳属性和事后推理,例如Harris集。
2022-11-11 cs.LO cs.PL
From Events to Reactions: A Progress Report
Syndicate是一种新的协调、并发程序设计语言。它在线程的共享一切范式和参与者的无共享方法之间占据了一个新的点。辛迪加演员通过一个精心控制的数据库交换信息,分享共同的知识,该数据库清楚地界定了对话的范围。这种方法显然简化了并行活动的协调。然而,使用Syndicate编程的经验表明,需要提高语言抽象的水平。除了编写事件处理程序和直接管理事件订阅之外,该语言还必须支持响应式编程。本文介绍了面向事件的辛迪加编程,然后描述了一个初步的设计,以增强它与新的反应式编程结构。
2016-06-20 cs.PL
A Graph-Based Semantics Workbench for Concurrent Asynchronous Programs
已经提出了许多新颖的程序设计语言和库,它们提供了比线程更易于使用的并发模型。然而,设计成功实现其抽象而不丧失性能或引入意外行为的执行模型是具有挑战性的。SCOOP是一种并发的面向对象的消息传递语言,在其发展过程中,已经提出并实现了多种语义。我们提出了一个“语义工作台”,完全和半自动工具SCOOP,可用于分析和比较程序相对于不同的执行模型。我们证明了它的使用在检查语义的一致性,通过将其应用到一组有代表性的程序,并突出了死锁相关的语言的主要执行模型之间的差异。我们的工作台是基于一个模块化的和参数化的图形转换语义中实现的GROOVE工具。我们将讨论如何利用图转换来原子地对复杂的语言抽象建模,以及如何使用模型的视觉和代数性质来确定合理性。
2016-03-01 cs.DC cs.LO cs.PL
A General Framework for Automatic Termination Analysis of Logic Programs
本文描述了一个逻辑程序自动终止分析的一般框架,其中我们用“终止”来理解为程序和给定查询构造的LD树的有限性。证明了无限LD-树的分支的某个子集到有限集的映射的一个一般性质。从这一结果导出几个终止定理,通过使用不同的有限集。前两个是制定谓词依赖和原子依赖图。然后证明了与程序相关的查询-映射对的一般结果(参见图1)。\cite{Sagiv,Lindenstrauss:Sagiv})。在\cite{Lindenstrauss:Sagiv:Serebrenik}中描述的{ \em TermiLog}系统的正确性由此而来。在这个系统中,不可能证明涉及算术谓词的程序的终止性,因为整数的通常顺序不是有根据的。本文提出了一种新的方法,它可以很容易地结合在{ \em TermiLog}或类似的系统中,这使得它有可能证明终止程序涉及算术谓词。它是基于一个有限的整数抽象与查询映射对的技术相结合,基本上是能够划分为几种情况下,这样一个简单的终止功能足以为每种情况下的终止证明。最后概述了几种可能的扩展。
2000-12-13 cs.PL
Arithmetizing Shape Analysis
针对链式堆数据结构程序的内存安全验证难题,提出结合流抽象与视图抽象的归约方法,将内存安全证明转化为无堆程序证明,可借助现成工具验证多种链式结构的顺序及并发程序的内存安全性。
2024-08-16 cs.PL
Complexity of Data Dependence problems for Program Schemas with Concurrency
判定程序中的一点是否是数据依赖于另一点的问题是程序分析的基础,并已被广泛研究。在本文中,我们认为这个问题的抽象层次的程序模式中的计算发生在Herbrand域的条款和谓词符号,它代表任意谓词功能,是允许的。给定模式S的流程图中的顶点l,(变量复制)分配和变量v,w,我们表明,这是PSPACE-难以决定是否存在一个由S定义的程序的执行,其中v持有w的初始值,至少有一个出现在执行路径上的l,如果S中任何谓词的元数有一个恒定的上界,则PSPACE中的成员资格保持不变。我们还考虑了“对偶”问题,其中v必须在l的每次出现时保持w的初始值,对此类似的结果成立。此外,前一个问题的程序与非确定性的分支(实际上,自由模式),其中分配与功能被允许被证明是多项式时间可判定的提供一个恒定的上限被放置在并发操作符的出现次数被认为是在模式。这个结果是有希望的,因为许多并发系统具有相对较少的线程(并发进程),特别是与它们具有的语句数量相比。
2011-04-12 cs.CC cs.PL
Automated Verification of CountDownLatch
CountDownLatch(CDL)是一种通用的并发机制,最早在Java 5中引入,现在也被C++和C#采用。它的使用允许一个或多个线程交换资源,并通过等待某些任务完成,然后其他任务才能继续进行同步。在本文中,我们提出了一个新的框架,用于验证使用CDLs的并发应用程序的正确性。我们的框架是建立在两个现有的机制,并发抽象谓词和虚构的分离逻辑,与一些增强,如借用堆和线程本地抽象。此外,我们提出了一种新的基于等待关系的不一致检测机制,以保证死锁自由。以前的并发验证工作主要集中在数据竞争自由。作为一个实际的概念证明,我们已经实现了这个新的规范和验证机制CDL在一个新的工具,称为HIPCAP,在现有的HIP验证器。我们已经使用这个新工具成功验证了CDL的各种用例。
2019-08-26 cs.PL
Scenario-Based Proofs for Concurrent Objects [Extended Version]
提出基于场景的并发对象证明技术,将代表性交错形式化为交换性商,并用表达式语言定义抽象以简化线性化证明,在多个经典算法上验证有效。
2024-10-17 cs.PL
Software Model Checking via Large-Block Encoding
抽象可达树(ART)的构造和分析是软件验证方法成功的基础。ART表示程序的控制流图的展开。传统上,ART的转换表示程序的单个块,因此,我们称这种方法为单块编码(SBE)。SBE可能会导致大量的程序路径被探索,这构成了效率低下的根本原因。我们提出了一个概括的方法,其中过渡的艺术代表更大的部分程序,我们称之为这种方法的大块编码(LBE)。LBE可以将待探索的路径的数量减少到指数级。在这个框架内,我们还研究了符号表示:对于表示抽象状态,除了在SBE中使用的合取,我们研究了使用任意布尔公式;对于计算抽象后继状态,除了在SBE中使用的笛卡尔谓词抽象,我们研究了使用布尔谓词抽象。新的编码利用了最先进的SMT求解器的效率,它可以象征性地计算抽象的大块后继。我们在基准C程序上的实验表明,大块编码优于单块编码。
2009-04-29 cs.PL cs.SE
Data Flow Refinement Type Inference
精化类型支持函数程序的轻量级验证。用于静态推断细化类型的算法通常通过简化到求解从类型化派生中提取的受约束Horn子句的系统来工作。一个例子是Liquid类型推断,它使用谓词抽象来解决提取的约束。然而,约束求解本身的简化已经意味着影响整体静态分析精度的程序语义的抽象。为了更好地理解这个问题,我们通过抽象解释的视角来整体研究类型推断问题。我们提出了一个新的细化类型系统,是参数的类型细化的抽象域的选择,以及它跟踪上下文敏感的控制流信息的程度。然后,我们推导出一个伴随的参数推理算法作为一个抽象的解释一个新的数据流语义的功能程序。我们进一步表明,类型系统是健全的和完整的构造抽象语义。我们的理论发展揭示了细化类型推断算法中固有的关键抽象步骤。这些抽象步骤的精度和效率之间的权衡由类型系统的参数控制。现有的精化类型系统及其相应的推理算法,如Liquid类型,都是通过具体的参数实例化来捕获的。我们已经在一个原型工具中实现了我们的框架,并针对一系列新的参数实例(例如,使用八边形和多面体来表示类型细化)。该工具与其他现有工具相比毫不逊色。我们的评估表明,我们的方法可以用来系统地构建新的细化类型推断算法,是强大的和精确的。
2020-11-10 cs.PL
TaDA Live: Compositional Reasoning for Termination of Fine-grained Concurrent Programs
我们提出了TaDA现场,一个并发分离逻辑的推理组合终止阻塞细粒度并发程序。关键的挑战是如何处理抽象的原子阻塞:也就是说,抽象的原子操作具有阻塞行为,这些阻塞行为来自于例如细粒度自旋锁中的忙等待模式。我们的基本创新是抽象规范的设计,捕捉这种阻塞行为作为对环境的活跃假设。我们设计了一个逻辑,可以原因的客户端使用这些操作的终止,而不会打破他们的抽象边界,和操作的实现相对于他们的抽象规范的正确性。我们引入了一个新的语义模型,使用分层的主观义务来表达活性不变量,和一个证明系统,这是健全的模型。我们的规范和推理的微妙之处说明了使用几个案例研究。
2021-11-30 cs.LO cs.PL
Reducing Opacity to Linearizability: A Sound and Complete Method
事务内存是一种代表程序员管理线程同步的机制,以便代码块以原子性的假象执行。事务内存的主要安全标准是不透明性,它定义了串行化并发事务的条件。证明不透明性是复杂的,因为它允许并发事务观察不同的内存状态,而TM实现通常基于一个共享存储。本文提出了一个健全的和完整的方法,基于粗粒度的抽象,减少证明的不透明性相对简单的正确性条件:线性化。我们使用我们的方法来验证TML和NORec从文献中,并显示我们的技术扩展到宽松的内存模型,表明这两个TSO下是不透明的,而不需要额外的围栏。我们的方法还阐明了TM设计在更高的抽象层次,作为一个应用程序,我们开发了一个变化的NORec与快速路径读取事务。我们所有的证明都是机械化的,无论是在Isabelle定理证明器还是PAT模型检查器中。
2016-10-04 cs.DC cs.DS cs.LO
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
CIR+CVN: Bridging LLM Semantic Understanding and Petri-Net Verification for Concurrent Programs
Tongji University(同济大学)
本文提出CIR+CVN框架,通过LLM生成并发抽象模型,结合Petri网验证并发程序,实现迭代调试与修复,提升并发程序的可靠性。
2026-04-10 cs.FL cs.PL
CommCSL: Proving Information Flow Security for Concurrent Programs using Abstract Commutativity
本文提出一种基于抽象交换性的并发程序信息流安全新型验证技术,解除现有方法对分支和执行平台的限制,并在 CommCSL 逻辑与 HyperViper 验证器中实现与证明其可靠性与广泛适用性。
2023-04-11 cs.CR cs.PL
D$^2$ABS: A Framework for Dynamic Dependence Abstraction of Distributed Programs
随着现代软件系统越来越多地在分布式环境中运行,提供诸如依赖分析之类的基本技术来检查、诊断和演化这些系统是至关重要的。然而,传统的依赖分析是不适用的或非常有限的效用,由于这些程序的解耦组件,运行在并发进程在物理上分离的机器上的分布式程序。基于分布式软件依赖分析的需要和基于依赖的应用程序的不同成本效益的需求,本文提出了D $^2$ ABS,一个分布式程序的动态依赖抽象框架。通过对分布式方法执行事件进行部分排序并从排序的事件中推断因果关系,D $^2$ ABS抽象了过程边界内和过程边界之间的方法级依赖关系。此外,通过利用跨进程的消息传递语义,并将静态依赖关系和语句覆盖范围内的各个组件,我们提出了三个额外的实例D $^2$ ABS的贸易效率更好的精度。我们提出了设计的D $^2$ ABS框架和评估的四个实例的D $^2$ ABS分布式系统的各种架构和规模使用我们的Java实现。我们的实证结果表明,D $^2$ ABS是显着更有效的比现有的选项,同时提供不同程度的成本效益权衡。由于我们的框架本质上是计算整个系统的运行时依赖关系,因此它自然会支持一系列其他基于依赖关系的应用程序。
2021-11-08 cs.DC cs.PL cs.SE
Reasoning about Continuous-Variable Quantum Systems
Institute of Software, Chinese Academy of Sciences(中国科学院软件研究所);Max Planck Institute for Security and Privacy (MPI-SP)(马克斯·普朗克安全与隐私研究所);IMDEA Software Institute(IMDEA软件研究所);University of Chinese Academy of Sciences(中国科学院大学);Centre for Quantum Software and Information , University of Technology Sydney(悉尼科技大学量子软件与信息研究中心)
研究连续变量量子计算(CVQC)语义基础未充分发展的问题,通过开发核心CV量子编程语言的形式语义及验证方法,选择封闭正二次形式作语义谓词,经案例研究验证,为CVQC提供了可靠语义基础。
2026-10-20 cs.LO cs.PL math.FA