CEGAR - Tableaux:改进的模态可满足性算法解析
1. CEGARTab搜索策略
在模态逻辑的可满足性测试中,我们采用了一种名为CEGARTab的搜索策略。当我们根据初始节点(w_0)的赋值(\vartheta(w_0))触发菱形算子((\Diamond))规则时,需要遍历所有触发的菱形算子。如果所有选择都保持开放,那么我们就得到了一个克里普克模型;反之,如果某个子节点(w_1)关闭,它会返回一个不可满足核心(A’(w_1) \subseteq (d ; B)),这将关闭对应(\Diamond d)的表列分支,并确定导致分支关闭的(w_1)中的单位假设。
在传统表列方法中,遇到这种情况会回溯到下一个最高的析取规则应用处。但我们可以更巧妙地学习一个子句来避免这种简单的回溯。具体做法是,将不可满足核心(A(w_1)’)扩展为(A_d(w_1)),确保(d)在(A_d(w_1))中,因为(\Diamond d)是从(w_0)到(w_1)“跳跃”的主公式。然后,通过“取消触发”每个导致其后续公式(f)进入(A_d(w_1))的(e \to \Box f)和(e \to \Diamond f),找到(w_0)中的“罪魁祸首”(e \in \vartheta(w_0)),从而得到(w_0)的冲突集(CS(w_0))。
我们会添加这些“罪魁祸首”否定的析取式(\varphi(w_0) := (\neg l_1 \vee \cdots \vee \neg l_n))作为新子句,并以(w_0’ := w_0 ; \varphi(w_0))重新启动(w_0)。这样做的直觉是,我们的传统表列过程实际上是在新的(w_0’)上重新启动静态规则,以找到一个与(\vartheta(w_0))不同的
超级会员免费看
订阅专栏 解锁全文

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



