一句话:用代数效应与处理句柄将 Prolog 式局部状态逐步翻译为低层状态效应,并用程序计算证明各步正确。
高层效应抽象简洁,低层效应便于控制执行与资源,将前者翻译为后者并保持语义是关键。本文以代数效应与处理句柄为框架,研究用低层状态效应模拟高层效应,聚焦 Prolog 中状态与非确定性交互形成的局部状态。作者逐步翻译:先将高层局部状态映射为低层全局状态,回溯时显式恢复更新;再消除非确定性,改用含选择点栈的状态;随后采用增量、可逆更新避免复制状态,并用另一状态效应把更新存入 trail 栈。所有步骤均用程序计算证明正确,处理句柄融合律起核心作用。这表明 Prolog/WAM 风格状态管理可由低层状态效应逐步模拟。
Abstract Some effects are considered to be higher level than others. High-level effects provide expressive and succinct abstraction of programming concepts, while low-level effects allow more fine-grained control over program execution and resources. Yet, often it is desirable to write programs using the convenient abstraction offered by high-level effects, and meanwhile still benefit from the optimizations enabled by low-level effects. One solution is to translate high-level effects to low-level ones. This paper studies how algebraic effects and handlers allow us to simulate high-level effects in terms of low-level effects. In particular, we focus on the interaction between state and nondeterminism known as the local state, as provided by Prolog. We map this high-level semantics in successive steps onto a low-level composite state effect, similar to that managed by Prolog’s Warren Abstract Machine. We first give a translation from the high-level local-state semantics to the low-level global-state semantics, by explicitly restoring state updates on backtracking. Next, we eliminate nondeterminism altogether in favour of a lower-level state containing a choicepoint stack. Then we avoid copying the state by restricting ourselves to incremental, reversible state updates. We show how these updates can be stored on a trail stack with another state effect. We prove the correctness of all our steps using program calculation where the fusion laws of effect handlers play a central role.