The problem of checking whether two programs are semantically equivalent or not has a diverse range of applications, and is consequently of substantial importance. There are several techniques that address this problem, chiefly by constructing a product program that makes it easier to derive useful invariants. A novel addition to these is a technique that uses alignment predicates to align traces of the two programs, in order to construct a program alignment automaton. Being guided by predicates is not just beneficial in dealing with syntactic dissimilarities, but also in staying relevant to the property. However, there are also drawbacks of a trace-based technique. Obtaining traces that cover all program behaviors is difficult, and any under-approximation may lead to an incomplete product program. Moreover, an indirect construction of this kind is unaware of the missing behaviors, and has no control over the aforesaid incompleteness. This paper, addressing these concerns, presents an algorithm to construct the program alignment automaton directly instead of relying on traces.
翻译:检查两个程序是否在音义上等同或没有多种应用的问题,因此非常重要。 有几个技术可以解决这个问题, 主要是通过构建一个产品程序, 更容易获得有用的变异性。 其中一个新颖的附加技术是使用对齐的前提来对两个程序痕迹进行对齐, 以便构建一个程序对齐自动图。 受对齐的指导不仅有利于处理共性差异, 也有利于保持与属性相关的关联。 但是, 也存在基于跟踪的技术的缺陷。 获取覆盖所有程序行为的痕迹是困难的, 任何对称不足可能导致一个不完整的产品程序。 此外, 这种间接的构造并不了解缺失的行为, 并且无法控制上述不完全性。 本文针对这些关切, 提出了一个算法, 直接构建程序对齐的自动图, 而不是依赖痕迹 。