归结法把证明统一成一个目标:从前提与否定结论构成的子句集中推出空子句。
为什么要否定结论
Γ⊨R
成立,当且仅当
Γ∪{¬R}
不可满足。若假设前提全真而结论为假会导致矛盾,原推论就成立。
文字、子句和空子句
原子公式或其否定叫文字。文字的析取叫子句:
p∨¬q∨r.
空子句记为
□.
它没有任何文字,因此不可能被任何赋值满足,相当于“假”。
归结规则
若两个子句分别含互补文字 q 与 ¬q:
C1=q∨P,
C2=¬q∨Q,
则可推出归结子句
P∨Q.
直觉是:若 q=0,第一子句必须靠 P 为真;若 q=1,第二子句必须靠 Q 为真,因此无论哪种情况,P∨Q 都真。
归结子句是父子句的逻辑推论。
标准解题流程
证明
Γ⊨R
时:
- 写出 Γ∧¬R;
- 消去 →,↔;
- 推进否定并化为 CNF;
- 把每个简单析取式放入子句集;
- 连续归结,直到得到 □。
若推不出空子句,不代表推论一定不成立;可能只是归结路线没选好。但命题归结法是完备的:不可满足子句集一定存在某个归结反驳。
完整算例
证明
P→(Q∧R)⊨(P→Q)∧(P→R).
加入否定结论:
(P→(Q∧R))∧¬((P→Q)∧(P→R)).
前提化为
(¬P∨Q)∧(¬P∨R).
否定结论:
¬(P→Q)∨¬(P→R)≡(P∧¬Q)∨(P∧¬R).
分配整理后,可按分支理解;也可以直接证明两个结论分别成立。对子句反驳的一条路线是选择否定合取后的 CNF 表达,得到等价子句并归结。
更直观地分两种可能:
- 若 ¬(P→Q),则有 P 与 ¬Q;
- 若 ¬(P→R),则有 P 与 ¬R。
第一种与 ¬P∨Q 归结出矛盾;第二种与 ¬P∨R 归结出矛盾。因此否定结论的每个分支都不可满足,原结论成立。
再看一个直接的子句序列。证明
P∧Q→R⊨(P→R)∨(Q→R).
前提是子句
¬P∨¬Q∨R.
否定结论:
¬((¬P∨R)∨(¬Q∨R))≡P∧Q∧¬R.
子句集为
Ω={¬P∨¬Q∨R, P, Q, ¬R}.
归结:
¬P∨¬Q∨R, P⟹¬Q∨R,
¬Q∨R, Q⟹R,
R, ¬R⟹□.
常见错误
没有先化成子句
P∧Q 不是一个子句,应拆成两个子句 P 与 Q。
一次消掉多个互补对
归结规则一次选一对互补文字。若两个父子句含多对互补文字,随意全部消去可能得到并非逻辑推论的式子。
忘了否定结论
直接把结论塞进子句集,推出空子句只说明“前提加结论”矛盾,方向完全反了。
把公式等值与子句推出混用
化 CNF 时用等值变换;进入子句集后,每一步应写归结父子句与所得子句。两种阶段的规则不同。