我在这一讲把三块看似分散的内容串起来:真值表能构造公式,所以可以证明联结词集合是完备的;构造时得到的就是主析取范式;而判断推论又可以化成永真式或不可满足性问题。
什么是联结词完全集
若每个真值函数都能由联结词集合 S 中的联结词定义,则称 S 为完全集。
最常用的完全集包括:
{¬,∧,∨},{¬,∧},{¬,∨},{¬,→}.
以 {¬,∧,∨} 为例,给定任意真值函数:
- 为每个输出为 1 的真值行写一个极小项;
- 把这些极小项析取起来。
所得公式只使用 ¬,∧,∨,并且与原真值函数完全相同,因此该集合完备。
若一个完全集删掉任何一个联结词后都不再完备,就叫极小完全集。“极小”是对包含关系而言,不是说联结词数量一定最少。
与非和或非
与非、或非定义为
p↑q=¬(p∧q),
p↓q=¬(p∨q).
单独一个与非就能定义否定和合取:
¬p=p↑p,
p∧q=(p↑q)↑(p↑q).
所以 {↑} 是完全集。同理 {↓} 也是完全集。这正是数字电路里 NAND、NOR 通用性的逻辑基础。
范式的层次
命题变元或其否定叫文字。
- 文字的析取叫简单析取式;
- 文字的合取叫简单合取式;
- 简单析取式的合取叫合取范式 CNF;
- 简单合取式的析取叫析取范式 DNF。
一个公式可能同时是 CNF 和 DNF。例如 p∧q:
- 它是一个简单合取式,所以也是只有一项的 DNF;
- 把 p,q 各看成只有一个文字的简单析取式,它又是 CNF。
主范式
关于 p1,…,pn 的极小项必须让每个变量恰好出现一次,形式是文字的合取;极大项则是每个变量恰好出现一次的文字析取。
构造规则:
- 真值行中变量为 1,极小项取变量本身;为 0,取否定;
- 真值行中变量为 0,极大项取变量本身;为 1,取否定。
这保证极小项只在对应行取 1,极大项只在对应行取 0。
完整算例
求
A=(p→q)∧(p→r)
的主范式。先化简:
A=(¬p∨q)∧(¬p∨r).
当 p=0 时公式恒真;当 p=1 时要求 q=r=1。所以真值为 1 的行是
000, 001, 010, 011, 111.
主析取范式为
(¬p∧¬q∧¬r)∨(¬p∧¬q∧r)∨(¬p∧q∧¬r)∨(¬p∧q∧r)∨(p∧q∧r).
其余三行 100,101,110 为假,主合取范式为
(¬p∨q∨r)∧(¬p∨q∨¬r)∧(¬p∨¬q∨r).
逻辑推论
若每个满足 Γ 中全部公式的赋值也满足 B,记为
Γ⊨B.
三条高频定理是:
A1,…,An⊨B⟺⊨(A1∧⋯∧An)→B,
A≡B⟺A⊨B and B⊨A,
Γ⊨B⟺Unsat(Γ∪{¬B}).
证明与反例
判断
p∨q, ¬p⊨q.
若前提全真,则 p∨q=1 且 p=0,只能有 q=1,所以推论成立。
判断
p∨q, p→q, q⊨p.
取 p=0,q=1,三个前提全真而结论为假,因此推论不成立。
数字电路只是主范式的应用
真值表每个输出列都是一个真值函数。把输出为 1 的行写成极小项并析取,就得到电路的主析取范式。
三输入全加器的和位为
S=A⊕B⊕Cin,
进位位为
Cout=(A∧B)∨(A∧Cin)∨(B∧Cin).
译码器、多路选择器和加法器题本质相同:不要先猜化简式,先严格按真值行写主范式,再按需要化简。