Loop invariants are software properties that hold before and after every iteration of a loop. As such, invariants provide inductive arguments that are key in automating the verification of program loops. The problem of generating loop invariants; in particular, invariants described by polynomial relations (so called polynomial invariants), is therefore one of the hardest problems in software verification. In this paper we advocate an alternative solution to invariant generation. Rather than inferring invariants from loops, we synthesise loops from invariants. As such, we generate loops that satisfy a given set of polynomials; in other words, our synthesised loops are correct by construction. Our work turns the problem of loop synthesis into a symbolic computation challenge. We employ techniques from algebraic geometry to synthesise loops whose polynomial invariants are described by pure difference binomials. We show that such complex polynomial invariants need ``only'' linear loops, opening up new venues in program optimisation. We prove the existence of non-trivial loops with linear updates for polynomial invariants generated by pure difference binomials. Importantly, we introduce an algorithmic approach that constructs linear loops from such polynomial invariants, by generating linear recurrence sequences that have specified algebraic relations among their terms.
翻译:旋转变量是每个循环循环周期之前和之后的软件属性。 因此, 变量提供了导引参数, 它们是程序循环的自动校验的关键。 生成循环变量的问题, 特别是多分子关系( 称为多分子差异) 描述的变量, 因此是软件核查中最困难的问题之一。 在本文中, 我们主张用另一种办法解决异变生成。 我们不是从循环中推断异变, 而是从异变循环中合成循环。 因此, 我们生成导导导论是程序循环的关键; 换句话说, 我们的合成循环是正确的。 我们的工作将环合成问题变成象征性的计算挑战。 我们从变异变中从变数的变异学到纯差异的合成循环中运用了技术。 我们显示, 此类复杂的多元性多元性循环需要“ 只用线性循环来推断, 在程序中打开新的位置; 换句话说, 我们的合成循环循环圈是正确的。 我们的工作把循环合成问题变成一个象征性的合成循环序列。 我们用正正数解释法的方法来构建一种不透明的双向性循环关系。 我们用正数的正数的轨法来解释。 。