逻辑抽象域:原理、应用与挑战
1. 引言
在程序验证领域,逻辑抽象域是一种强大的工具。在一阶逻辑环境中进行程序验证时,计算谓词变换器通常较为直接,但存在两个难点:一是计算最小不动点(或其近似值,因为逻辑格并不完备),二是证明最终公式蕴含所需的属性。为解决这些问题,我们引入逻辑抽象域的概念。
2. 公理语义相关概念
2.1 基于解释的公理语义
对于程序的所有可能解释都合理的抽象,在我们感兴趣的解释上可能不够精确。一种更精确的方法是接受 $Z⇒I$ 的所有后不动点作为不变量,而不仅仅是 $Z⇒$,这就定义了基于解释的公理语义。
定义 1:程序 $P$ 相对于解释 $I$ 的公理语义 $Ca_{IJPK}$ 定义为第 5 节中未解释的公理语义,相对于格 $\langle(,,), Z⇒I\rangle$,其中预序 $(\Psi Z⇒I Ψ ′) \triangleq validI(\Psi ⇒Ψ′)$(或等价地,$\neg satisfiableI(\Psi ∧¬Ψ ′)$),并通过 $(\Psi ⇐\Z⇒I Ψ ′) \triangleq validI(\Psi ⇔Ψ ′)$ 进行商运算。
这些基于解释 $I$ 的公理语义的一个显著特点是它们都共享相同的程序变换器 $Fa_{JPK}$。如果 $I ⊆I′$,那么 $Ca_{IJPK} ⊇ Ca_{I′JPK} ∩PI$,这意味着相对于 $I$ 的语义比相对于 $I′$ 的语义更精确。其合理性源于它是公理语义与程序解释抽象的约化积,只要 $I$ 包含我们希望考虑的程序语义中的所有解释,这种抽象就是合理的。
超级会员免费看
订阅专栏 解锁全文
9万+

被折叠的 条评论
为什么被折叠?



