一句话:提出用 Hoare 前后条件表达库效应,以双向搜索和冲突驱动学习引导组件式程序合成。
基于组件的合成利用库 API 构造程序,但库 API 常带副作用:对全局状态的修改会影响组件组合,使搜索空间急剧增大,传统枚举式合成难以应对。本文提出规范引导的合成过程,用 Hoare 风格前后条件描述候选库组件的细粒度效应,并驱动双向搜索:前向搜索在已有上下文下构造更大项,却不感知目标;后向搜索寻找与目标一致的项,却不感知合成上下文。二者交替进行。为提升效率与可扩展性,作者将冲突驱动学习融入算法,对失败搜索路径给出语义刻画并剪枝候选空间。作者实现工具并在多个带副作用规范的 OCaml 库合成任务上验证了有效性。
Component-based synthesis seeks to build programs using the APIs provided by a set of libraries. Oftentimes, these APIs have effects, which make it challenging to reason about the correctness of potential synthesis candidates. This is because changes to global state made by effectful library procedures affect how they may be composed together, yielding an intractably large search space that can confound typical enumerative synthesis techniques. If the nature of these effects are exposed as part of their specification, however, deductive synthesis approaches can be used to help guide the search for components. In this paper, we present a new specification-guided synthesis procedure that uses Hoare-style pre- and post-conditions to express fine-grained effects of potential library component candidates to drive a bi-directional synthesis search strategy. The procedure alternates between a forward search process that seeks to build larger terms given an existing context but which is otherwise unaware of the actual goal, alongside a backward search mechanism that seeks terms consistent with the desired goal but which is otherwise unaware of the context from which these terms must be synthesized. To further improve efficiency and scalability, we integrate a conflict-driven learning procedure into the synthesis algorithm that provides a semantic characterization of previously encountered unsuccessful search paths that is used to prune the space of possible candidates as synthesis proceeds. We have implemented our ideas in a tool called and demonstrate its effectiveness on a number of challenging synthesis problems defined over OCaml libraries equipped with effectful specifications.
@article{paperbot1448,
title = {Specification-guided component-based synthesis from effectful libraries},
author = {Ashish Mishra and Suresh Jagannathan},
journal = {Proceedings of the ACM on Programming Languages},
volume = {6},
number = {OOPSLA2},
year = {2022},
doi = {10.1145/3563310}
}