Abstract Interpretation approximates the semantics of a program by mimicking its concrete fixpoint computation on an abstract domain $\mathbb{A}$. The abstract (post-) fixpoint computation is classically divided into two phases: the ascending phase, using widenings as extrapolation operators to enforce termination, is followed by a descending phase, using narrowings as interpolation operators, so as to mitigate the effect of the precision losses introduced by widenings. In this paper we propose a simple variation of this classical approach where, to more effectively recover precision, we decouple the two phases: in particular, before starting the descending phase, we replace the domain $\mathbb{A}$ with a more precise abstract domain $\mathbb{D}$. The correctness of the approach is justified by casting it as an instance of the A$^2$I framework. After demonstrating the new technique on a simple example, we summarize the results of a preliminary experimental evaluation, showing that it is able to obtain significant precision improvements for several choices of the domains $\mathbb{A}$ and $\mathbb{D}$.
翻译:抽象解释通过在抽象域名 $\ mathbb{A} 中模仿其具体固定点计算方法,大致相当于一个程序的语义。抽象(后)固定点计算通常分为两个阶段:上升阶段,利用扩大作为外推操作员执行终止,随后是递增阶段,利用缩小作为内推操作员,以减轻因扩大而带来的精确损失的影响。在本文中,我们建议了这种传统方法的简单变异,为了更有效地恢复精确性,我们分解了两个阶段:特别是在开始递增阶段之前,我们用更精确的抽象域名 $\ mathbb{A} 替换了域名 $\ mathb{D} 美元。这种方法的正确性是将其作为A$2美元框架的例子。我们用一个简单的例子来展示了新技术,我们总结了初步实验评估的结果,表明它能够为 $\mathb{A} 和 $\\\ mathb} $\\ a} $\\ a} $\\ a} $\\ a} $\ b} 提供若干选择获得显著的精确性改进。