Loop acceleration can be used to prove safety, reachability, runtime bounds, and (non-)termination of programs. To this end, a variety of acceleration techniques has been proposed. However, so far all of them have been monolithic, i.e., a single loop could not be accelerated using a combination of several different acceleration techniques. In contrast, we present a calculus that allows for combining acceleration techniques in a modular way and we show how to integrate many existing acceleration techniques into our calculus. Moreover, we propose two novel acceleration techniques that can be incorporated into our calculus seamlessly. Some of these acceleration techniques apply only to non-terminating loops. Thus, combining them with our novel calculus results in a new, modular approach for proving non-termination. An empirical evaluation demonstrates the applicability of our approach, both for loop acceleration and for proving non-termination.
翻译:循环加速可以用来证明程序的安全性、可达性、运行时间界限和( 不)终止程序。 为此,已经提出了各种加速技术。 但是,到目前为止,所有这些技术都是单一的, 也就是说, 无法使用几种不同的加速技术组合来加速单个循环。 相反, 我们提出了一个微积分, 能够以模块方式将加速技术结合起来, 我们展示了如何将许多现有的加速技术融入我们的微积分。 此外, 我们提出了两种新颖的加速技术, 可以无缝地融入我们的微积分中。 其中一些加速技术只适用于非终止环。 因此, 把它们与我们的新微积分结果结合起来, 以新的模块化方法来证明非终止。 实验性评估显示了我们方法的实用性, 包括循环加速和证明非终止。