“反向加入一条被BCE删去的子句,也是RAT证书可检查的一步:每个反pivot的非pivot余部已经提供互补对。沿删除日志反向加入可以得到合法前缀,但合法前缀不自动构成UNSAT证书。”
形式陈述
添加的子句可以不是原式的逻辑后果
RUP编号重放验证的是逻辑后果:假设候选子句
固定有限变量域
称
对非空、非重言的候选
都对活动数据库具有AT性质,则接受以
每一种记录都要有完成条件
本页使用三种显式教学记录,语法不作为完整LRAT文件解析器:[1, §§3–4]
AT(new_id, clause, ordered_hints)
RAT(new_id, clause, pivot, [(opposite_id, ordered_hints), ...])
DEL(active_ids)
新增编号必须是从未用过的正整数。变量、编号与pivot采用规范整数编码,布尔值 True 不能冒充整数1。DEL 中编号互异且当前活动。RAT的分支编号也须互异,并与数据库中包含反pivot的活动编号集合完全相同,既不能漏,也不能列不相关分支。即使两个活动子句内容相同,它们仍是两个需核对的身份。
一个非重言中间子句的提示检查复用RUP规则:新建局部赋值,令该子句全假;每条提示必须是活动子句,当前没有真文字,且最多剩一个未赋值文字。剩一个则传播它,剩零则冲突,并要求冲突恰是最后提示。提示耗尽仍无冲突、某提示已经满足或仍有两项未定,都拒绝。重言中间子句直接通过,要求该分支提示为空。
不同RAT分支的局部假设全部重新开始,不能串用。候选子句只有在所有分支通过后才进入数据库,因此不能引用自己证明自己。没有反pivot子句时,RAT全称检查为空,非空候选可直接添加;这是安全的纯文字方向。
AT可以添加空子句,RAT分支却必须有真实pivot。检查器把一段全部合法但尚未完成的日志返回为 VALID_PREFIX;只有最后一条记录成功以AT添加空子句,才返回 UNSAT_CERTIFIED。把数据库删空只是空合取变真,不是导出了空子句。
直觉
两种局部保证,两种全局不变量
RUP像排除反例:“任何原模型都必须满足新子句。”RAT允许修正反例:“如果旧模型不满足新子句,把这一个pivot改成真,仍能保住所有旧约束。”因而不能沿用RUP的“每个活动子句都由原式蕴涵”不变量。
整个日志使用的保证是
它只要求一个原模型的存在能够沿合法操作持续下去。添加RAT有构造性模型修复保证;删除子句只减弱条件,也维持这个方向。最后若
为什么翻pivot不会弄坏旧公式
先用旧RUP的局部可靠性:通过的AT检查说明
取任意
把
例子与边界
一个可满足例子直接区分RAT与蕴涵
设编号1为
但旧模型
这个新子句也不满足BCE的纯重言条件:和编号1按
八个三文字子句的完整反驳
用全部八种极性组合构造原式,顺序为:
| ID | 子句 | ID | 子句 |
|---|---|---|---|
| 1 | 5 | ||
| 2 | 6 | ||
| 3 | 7 | ||
| 4 | 8 |
每个总赋值恰好使其中一条全假,所以原式不可满足。单位传播在空赋值下看不到单位;只假设
RAT却能验证它。以
RAT(9, [a], a, [(5,[1]), (6,[2]), (7,[3]), (8,[4])])
AT(10, [b], [9,5,6])
DEL([1,2,3,4,5,6])
AT(11, [], [9,10,7,8])
第二行假设
哪些改动必须拒绝
删去第一行的分支8,剩余三个局部传播仍各自正确,但全反pivot集合没有覆盖,整行拒绝。把某分支提示改成9也拒绝:候选9还未加入,不能参加自己的论证。若先删除1,再沿用分支5的提示1,会在活动编号检查处拒绝。
若直接尝试 AT(9,[a],[1]),反证假设只有
在可满足小例中只删除全部子句,或者完成合法RAT添加就停止,均只得到 VALID_PREFIX。被拒的日志也不证明原式可满足;它只说明这份候选证据没有通过既定接口。
推论与应用
反向子句消除为什么能加入日志
阻塞子句消除删除
例如对三子句
检查成本要数扫描、分支与提示文字
采用期望常数时间的散列表,令输入与记录的总编码项目数为
本页程序完整扫描当前数据库以核对反pivot集合,再按各分支重新建立假设,所以接受一份有限日志的期望时间为
它没有从提示格式凭空取得“只看提示、不扫数据库”的保证。记录可以删除大量子句后继续,也可以不断增加新的永久编号;额外空间必须分别计当前活动文字、全部已用编号、最大单次局部赋值,以及审计输出。
审计输出保留每个中间子句的全假假设和单位/冲突事件,长度按
信任边界仍从原式开始
RAT缩小的是求解器日志验证责任,不能修正上游的错误CNF编码。若程序性质少编码了一个约束,可靠检查器也只会证明它实际收到的公式。本文的Python参考器使用显式检查,在普通与 -O 模式执行同一验收;这不是在证明助理内验证过的生产LRAT内核。[1]中的Coq/ACL2实现承担更强的形式化验证任务。
综合练习交付完整删除日志、SAT模型恢复、四分支RAT反驳与错误日志拒绝。迁移时增加一个同内容但新编号的反pivot子句,必须同时增加其分支;只比较子句内容集合会漏掉本页的身份合同。
参考资料
[1] Luís Cruz-Filipe、Marijn J. H. Heule、Warren A. Hunt Jr.、Matt Kaufmann、Peter Schneider-Kamp,Efficient Certified RAT Verification,CADE 2017作者版。§2给AT/RAT与可满足性保持定义,§3给完整反pivot候选及传播提示,§4给check_RAT、check_LRAT与可靠性定理,PDF pp.3–8。本文不用其数据结构假设替代本页参考器的实际成本。