Skip to main content
QUICK REVIEW

[论文解读] Synthesis of Parametric Programs using Genetic Programming and Model Checking

Gal Katz, Doron Peled|arXiv (Cornell University)|Feb 27, 2014
Formal Methods in Verification参考文献 19被引用 5
一句话总结

本文提出一种混合方法,结合遗传编程(GP)与模型检测,以合成正确性设计的参数化程序。该方法通过可满足性检查进行适应度评估,并利用反例驱动的迭代优化,演化出满足时序逻辑规范的程序,成功解决了诸如无溢出平均值计算和互斥协议等复杂问题。

ABSTRACT

Formal methods apply algorithms based on mathematical principles to enhance the reliability of systems. It would only be natural to try to progress from verification, model checking or testing a system against its formal specification into constructing it automatically. Classical algorithmic synthesis theory provides interesting algorithms but also alarming high complexity and undecidability results. The use of genetic programming, in combination with model checking and testing, provides a powerful heuristic to synthesize programs. The method is not completely automatic, as it is fine tuned by a user that sets up the specification and parameters. It also does not guarantee to always succeed and converge towards a solution that satisfies all the required properties. However, we applied it successfully on quite nontrivial examples and managed to find solutions to hard programming challenges, as well as to improve and to correct code. We describe here several versions of our method for synthesizing sequential and concurrent systems.

研究动机与目标

  • 解决合成正确性设计的参数化程序的挑战,此类问题在经典合成方法中因不可判定性和高复杂度而固有困难。
  • 克服传统模型检查的局限性,将其不作为完整验证方法,而是作为固定参数实例的全面测试引擎。
  • 通过人工引导、启发式驱动的进化过程,实现对有缺陷或次优代码的自动修正与优化。
  • 扩展遗传编程,使其不仅能演化代码逻辑,还能演化系统架构,包括进程结构与通信通道。
  • 为形式化验证单独难以实现的复杂并发与顺序程序,提供一种实用且可扩展的合成框架。

提出的方法

  • 使用遗传编程通过在语法结构(包括赋值、位运算和控制结构)上应用变异操作,生成并演化候选程序。
  • 采用增强的模型检查或SMT求解器评估正确性,不仅返回是/否结果,还返回反例和基于时序逻辑属性可满足性的适应度等级。
  • 集成结合可满足性检查与测试用例覆盖的适应度函数,复用前序迭代中失败的测试用例以引导演化过程。
  • 从失败候选程序中累积反例和参数集,形成不断增长的测试套件,从而在无需完整验证的情况下提升正确性置信度。
  • 通过修改规范、适应度启发式规则或初始代码模板,支持人工引导的迭代优化,以引导搜索朝向期望解。
  • 通过允许对进程结构和通信通道进行变异,支持架构演化,从而实现对架构缺陷的发现与修正。

实验结果

研究问题

  • RQ1尽管经典合成方法存在不可判定性,基于模型检测引导的遗传编程是否能有效合成正确性设计的参数化程序?
  • RQ2在完整验证不可行的情况下,如何将模型检测重新定位为参数化系统的通用测试机制?
  • RQ3该方法在多大程度上能基于形式化规范自动修正或改进有缺陷或次优的代码?
  • RQ4该框架是否能演化不仅代码逻辑,还包括系统架构(如进程数量、通信模式),以发现正确的并发设计?
  • RQ5可满足性检查与反例驱动的测试用例累积相结合,在引导收敛至正确解方面有多高效?

主要发现

  • 通过迭代演化,该方法成功从有缺陷的初始版本中合成出正确且无溢出的平均值计算程序(与文献[23]中的已知解完全一致)。
  • 该框架成功合成并验证了一个正确的互斥算法,证明了其在复杂并发系统中的适用性。
  • 该方法在数秒内生成了正确的位向量问题程序(当且仅当输入为2^n - 1时输出0),并证明了对所有固定宽度位向量输入的正确性。
  • 从失败候选程序中复用的反例有效引导了搜索过程,显著提升了收敛速度与适应度评估的准确性。
  • 该框架实现了对一个朴素平均值计算算法的自动修正,该算法在大输入下会发生溢出,最终演化为正确且高效的解决方案。
  • 该方法不能保证终止或始终成功,但通过广泛的测试用例覆盖与可满足性检查,提供了强有力的正确性实证证据,使其在实际合成任务中具有可行性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。