An uninterpreted program (UP) is a program whose semantics is defined over the theory of uninterpreted functions. This is a common abstraction used in equivalence checking, compiler optimization, and program verification. While simple, the model is sufficiently powerful to encode counter automata, and, hence, undecidable. Recently, a class of UP programs, called coherent, has been proposed and shown to be decidable. We provide an alternative, logical characterization, of this result. Specifically, we show that every coherent program is bisimilar to a finite state system. Moreover, an inductive invariant of a coherent program is representable by a formula whose terms are of depth at most 1. We also show that the original proof, via automata, only applies to programs over unary uninterpreted functions. While this work is purely theoretical, it suggests a novel abstraction that is complete for coherent programs but can be soundly used on arbitrary uninterpreted (and partially interpreted) programs.
翻译:一个未解释的程序( UP) 是一个程序, 其语义定义大于未解释函数的理论。 这是用于等同检查、 编译器优化以及程序校验的一个常见的抽象元素。 虽然简单, 模型足够强大, 可以编码反自动mata, 因而是不可变的。 最近, 一组名为一致性的 UP 程序被提出并显示为可变 。 我们为此结果提供了一种替代的、 逻辑的描述。 具体地说, 我们显示每个连贯的程序与一个有限的状态系统是两样的。 此外, 一个一致程序的感化性输入性可被一个公式所代表, 该公式的术语最深处为 1 。 我们还显示, 原始证据, 通过自动数据, 只适用于单项未解释的函数。 虽然这项工作是纯理论性的, 但它意味着一个新颖的抽象概念, 它对于一致性的程序来说是完整的, 但是可以在任意的未经解释的( 和部分解释的) 程序上被正确使用 。