[论文解读] Using Program Synthesis for Program Analysis
本文提出了一种合成片段(synthesis fragment),这是二阶逻辑的一个可判定片段,能够捕捉关键的程序分析问题,如安全性、终止性和超优化。该文提出了一种基于程序合成的决策过程,通过合成有限状态程序高效地解决这些问题,其在性能和规格简洁性方面均优于现有的 SyGuS 方法。
In this paper, we identify a fragment of second-order logic with restricted quantification that is expressive enough to capture numerous static analysis problems (e.g. safety proving, bug finding, termination and non-termination proving, superoptimisation). We call this fragment the {\it synthesis fragment}. Satisfiability of a formula in the synthesis fragment is decidable over finite domains; specifically the decision problem is NEXPTIME-complete. If a formula in this fragment is satisfiable, a solution consists of a satisfying assignment from the second order variables to \emph{functions over finite domains}. To concretely find these solutions, we synthesise \emph{programs} that compute the functions. Our program synthesis algorithm is complete for finite state programs, i.e. every \emph{function} over finite domains is computed by some \emph{program} that we can synthesise. We can therefore use our synthesiser as a decision procedure for the synthesis fragment of second-order logic, which in turn allows us to use it as a powerful backend for many program analysis tasks. To show the tractability of our approach, we evaluate the program synthesiser on several static analysis problems.
研究动机与目标
- 识别一个可判定的二阶逻辑片段,其表达能力足够强,可编码核心程序分析问题,如安全性证明、错误检测和终止性分析。
- 为有限状态函数开发一个完整的程序合成算法,使合成可作为该合成片段在有限域上的完整决策过程。
- 设计一个模块化、可扩展且高效的求解器,通过解耦问题表述与求解策略,适用于程序分析任务。
- 通过支持无界字典序排名函数和高效常量处理(无需语法模板),在性能上超越现有基于合成的方法(如 SyGuS)。
- 在真实世界的静态分析问题上评估该方法,证明其在性能和规格大小方面的实际可行性与优越性。
提出的方法
- 将合成片段定义为一种受限的二阶逻辑,其在有限域上的满足性可判定,并证明其为 NEXPTIME 完全。
- 将合成片段中的逻辑满足性问题归约为有限状态程序合成问题,其中每个满足赋值对应一个计算所需函数的程序。
- 实现一种混合合成算法,结合有界模型检测(CBMC)、显式状态模型检测和遗传编程,以探索候选解。
- 引入一种泛化策略:先为受限情况寻找简单解,再逐步泛化为完整解。
- 使用一种简洁的类 C 规格语言,避免使用语法模板(与 SyGuS 不同),从而可直接编码复杂函数,如字典序排名函数。
- 在合成语言中支持一等常量和无界维度输出,实现对复杂程序分析构造的高效表示。
实验结果
研究问题
- RQ1能否定义一个可判定的二阶逻辑片段,使其能捕捉包括安全性、终止性和超优化在内的广泛静态分析问题?
- RQ2程序合成能否作为该片段在有限域上的完整且高效的决策过程?
- RQ3与现有方法(如 SyGuS)相比,基于合成的方法在规格大小、性能和表达能力方面表现如何,特别是对于字典序排名函数等复杂构造?
- RQ4泛化策略与混合搜索(符号式、显式式和随机式)在多大程度上提升了求解高复杂度逻辑问题的可扩展性与效率?
- RQ5该合成算法能否高效处理一阶变量和常量的逻辑存在量词,尤其是当这些在其他框架中编码效率低下时?
主要发现
- 合成片段在有限域上是 NEXPTIME 完全且可判定的,为通过逻辑进行程序分析提供了坚实的理论基础。
- 所实现的合成器 Kalashnikov 在 20 个安全基准中解决了 18 个,平均运行时间为 11.3 秒,显著优于基于 SyGuS 的 eSolver(仅解决 7 个)。
- Kalashnikov 的规格大小约为等效 SyGuS 规格的 11%(341 行 vs. 3140 行),证明了其在简洁性方面的显著优势。
- 求解器性能高度依赖于证明的柯尔莫哥洛夫复杂度:简短的证明能被快速找到,表明其对具有紧凑解的问题具有极高效率。
- 泛化策略与混合搜索策略(CBMC、显式状态模型检测、遗传编程)对求解贡献显著,其中 46% 的候选解通过显式状态模型检测找到,31% 通过遗传编程找到。
- 求解器原生支持无界字典序排名函数,并实现高效常量编码(相比 SyGuS 中的位串链),使其能够解决 SyGuS 无法表达或高效处理的问题。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。