一句话:提出代数时序效应,用 later 模态处理递归类型,为高阶程序提供可证明安全性与活性的时序效应系统。
时序效应已被效应系统用于验证带递归函数的高阶程序的线性时序安全性与活性,但推广到递归类型时,递归类型易产生非结构化循环,破坏计算无限行为的正则性,使活性验证变得困难。本文提出带 later 模态的代数时序效应,通过对递归类型产生的晦涩循环进行分层来刻画非终止程序的行为。作者以代数方式公理化时序效应,明确可靠推理程序所需满足的条件,并在此基础上建立效应系统,证明安全性与活性两种可靠性。文中给出两个实例:基于 ω-正则表达式的时序正则效应,以及基于一阶不动点逻辑的时序不动点效应,并通过并发与面向对象程序等例子展示其实用性。
We present a general form of temporal effects for recursive types. Temporal effects have been adopted by effect systems to verify both linear-time temporal safety and liveness properties of higher-order programs with recursive functions. A challenge in a generalization to recursive types is that recursive types can easily cause unstructured loops, which obscure the regularity of the infinite behavior of computation and make it harder to statically verify liveness properties. To solve this problem, we introduce temporal effects with a later modality, which enable us to capture the behavior of non-terminating programs by stratifying obscure loops caused by recursive types. While temporal effects in the prior work are based on certain concrete formal forms, such as logical formulas and automata-based lattices, our temporal effects, which we call algebraic temporal effects , are more abstract, axiomatizing temporal effects in an algebraic manner and clarifying the requirements for temporal effects that can reason about programs soundly. We formulate algebraic temporal effects, formalize an effect system built on top of them, and prove two kinds of soundness of the effect system: safety and liveness soundness. We also introduce two instances of algebraic temporal effects: one is temporal regular effects , which are based on ω -regular expressions, and the other is temporal fixpoint effects , which are based on a first-order fixpoint logic. Their usefulness is demonstrated via examples including concurrent and object-oriented programs.
@article{paperbot3238,
title = {Algebraic Temporal Effects: Temporal Verification of Recursively Typed Higher-Order Programs},
author = {Taro Sekiyama and Hiroshi Unno},
journal = {Proceedings of the ACM on Programming Languages},
volume = {9},
number = {POPL},
year = {2025},
doi = {10.1145/3704914}
}