命题逻辑范式详解:从等值演算到主范式的机械推理
2026/9/17 10:53:03 网站建设 项目流程

1. 范式到底在解决什么问题

1.1 学之前:为什么教材要把范式单独拿出来

离散数学学到第三章命题逻辑,前半部分还算友好:联结词、真值表、等值演算,每一步都有明确的规则,做题就像套公式。等到“范式”这个词出现,很多人的第一反应是:这东西到底是干嘛的?

我当年学的时候也有同样的困惑。后来才明白,命题逻辑前面讲等值演算,本质上是在解决“两个公式是否等价”的问题。但等值演算有个尴尬的地方——它依赖技巧。同一个公式,一个人三步推完,另一个人可能绕了十步,还不一定推得对。范式就是来解决这个问题的:它把公式改写成一种“标准格式”,让判断等价、判断类型、甚至机械地比较两个公式是否相同,都变成流水线操作。

打个比方。生活中判断两份合同是否内容一致,最靠谱的办法不是逐字读,而是把两份合同都填成同一套标准模板,然后逐格比对。范式就是命题逻辑里的“标准模板”。任何复杂的命题公式,经过等值演算都能化成两种标准形态之一——析取范式或合取范式。如果进一步要求每个子项都包含所有命题变元,就得到主析取范式和主合取范式。后者的价值更大:一个公式的主范式是唯一的,也就是说,公式和它的主范式是“一一对应”的。

这个“唯一性”是整个第三章后半部分的灵魂。判断两个看似不同的公式是否等价,不用再做复杂的推导,直接各自求主范式,比一下编号集合是否相同,结果一目了然。判断一个公式是重言式、矛盾式还是可满足式,也不用瞪着眼睛观察,看主范式的结构特征就能机械判断。这也是范式的核心意义。

另外说一句,范式这部分不是考完就扔的内容。后续在谓词逻辑里会有前束范式,在数理逻辑里会用到斯柯伦范式,在自动定理证明里会接触归结原理,这些本质上都是“把公式规范化之后做机械推理”的思路。第三章的范式,就是这套思维的第一个落脚点。

1.2 哪个环节最值得花时间

以我自己的学习经验来说,范式这一章有三个环节值得投入时间。

第一个环节是理解“简单合取式”和“简单析取式”的概念。很多人在这里第一次卡住,因为名字太像了。简单合取式是若干个文字(命题变元或其否定)用“且”连接起来的公式,比如 p∧q、p∧¬q;简单析取式是若干个文字用“或”连接起来的公式,比如 p∨q、p∨¬q。记住口诀:合取是“且”,析取是“或”。

第二个环节是熟练等值演算的几个基本公式,特别是蕴含等值式 p→q ⇔ ¬p∨q、德摩根律、双重否定律、分配律。做范式题的第一步几乎都是消去蕴含,这一步不熟,后面全是空中楼阁。建议把等值演算的常用公式抄在一张纸上,做习题的时候放在旁边对照,等做到十道题以上,自然就记住了。

第三个环节是理解极小项和极大项的编号规则。这是主范式最核心的难点,也是考试最喜欢出题的点。极小项对应成真赋值,极大项对应成假赋值,编号规则完全一致:命题变元按顺序排列,变元本身记作该位为1,变元的否定记作该位为0,得到的二进制数翻译成十进制,就是该项的下标。后面我会用具体例子详细拆解。

如果这三个环节都能过关,范式这块的内容就基本拿下了。

2. 范式的两个基本形态

2.1 析取范式与合取范式:怎么区分不混淆

先看两种基本范式的定义。析取范式形如“简单合取式 用∨连接”,即 A₁∨A₂∨…∨Aₙ,其中每个 Aᵢ 是简单合取式(若干个文字用∧连接);合取范式形如“简单析取式 用∧连接”,即 B₁∧B₂∧…∧Bₙ,其中每个 Bᵢ 是简单析取式(若干个文字用∨连接)。

这个定义有一个非常容易踩的坑:名字和结构是反直觉的。析取范式外表看是“一堆合取项用析取连接”,合取范式外表看是“一堆析取项用合取连接”。也就是说,判断范式的类型,看的是最外层的主联结词,而不是每一项内部的联结词。

我自己的记忆方法很简单:析取范式,最外层是“或”;合取范式,最外层是“且”。而每一项内部的联结词跟外层正好相反。有人把这个叫做“里外相反律”。刚开始做题的时候,可以每次都先把“最外层主联结词”圈出来,习惯之后就不会混了。

这里还要区分一个概念:简单合取式和简单析取式本身都算范式,只是退化形式。单个文字既是简单合取式也是简单析取式,所以一个单独的 p 既可以看作析取范式,也可以看作合取范式。这个细节在有些题目里有用,比如判断“公式是否为析取范式”,单个文字的答案总是“是”。

另外要注意,不是所有公式都能不经处理直接看出属于哪种范式。一个公式如果是 ¬(p∧q) 的形式,外层是否定,严格来说它连范式都不是,因为否定联结词出现在最外层,而且作用域是整个括号。处理办法是用德摩根律把否定内移:¬(p∧q) ⇔ ¬p∨¬q,这样就得到了析取范式。判断一个公式是不是范式,标准很简单:只看“∧”“∨”“¬”三种联结词,并且否定符号只能直接出现在命题变元前面,不能作用于括号或更复杂的子公式。

2.2 什么时候用哪种范式

两种基本范式都用于判断公式类型,但各有侧重。对于一个已经化成的析取范式:如果它每个简单合取式都包含一对互为否定的文字(比如某个子项里同时出现 p 和 ¬p),那么这一项恒为假,可以去掉,不影响公式的真值;如果所有项都被去掉了,说明公式是矛盾式。反之,如果一个析取范式含有一个至少一项“可满足”的子句,它就有可能是可满足式。

对比之下,合取范式更适合判断重言式。一个合取范式如果每个简单析取式都含有一对互为否定的文字,那么每一项恒为真,整个公式就是重言式。比如 (p∨¬p)∧(q∨¬q),一眼就能看出它恒真。

可惜这个方法只适用于基本范式,不能用来判断主范式类型。主范式因为是标准形式,每个子项都含所有变元,所以“某个子项包含 p 和 ¬p”的情况不会出现,需要用另外的规则。

实际做题时,如果题目说“求公式的析取范式”,就用等值演算一步步推,保留有用项;如果只是“判断公式类型”,其实有更快的办法——先看它是否重言式或矛盾式,再决定是否需要继续化简。因为真值表法和主范式法虽然机械可靠,但遇到变元多的公式会非常繁琐,考试时时间有限,优先选择特征观察法。

下面给一个简单示例。公式 (p→q)∧p→q。用蕴含等值式先消去箭头:¬(¬p∨q)∧p ∨ q。注意这里有个经典的括号问题:原式看成 (A→B) 的形式,其中 A 是 (p→q)∧p,B 是 q,所以整个公式先变成 ¬A∨B,不要漏掉最外层括号。继续化简:¬(¬p∨q)∨¬p∨q,再用德摩根律和双重否定律得到 (p∧¬q)∨¬p∨q。这个析取范式里的第二项和第三项各含一个变元,说明它还不是主范式,需要通过补项来进一步处理。

3. 主范式:标准化的标准

3.1 极小项与极大项:真值表背后的编码

基本范式不够“标准”,因为同一个公式可以写出很多不同的析取范式,各项的长短也不一样。要得到“唯一标准”,就需要主范式。主范畴的核心概念是极小项(对应主析取范式)和极大项(对应主合取范式)。这里我直接说结论性的实操理解。

在有 n 个命题变元的公式中,极小项是包含全部 n 个变元(每个变元或其否定恰好出现一次,且按顺序排列)的简单合取式。因为每个变元有两种出现方式(本身或否定),所以一共有 2ⁿ 个不同的极小项。同理,极大项是包含全部变元的简单析取式,也有 2ⁿ 个。

极小项有一个重要性质:在全部 2ⁿ 个赋值中,每个极小项只在一种赋值下为真。比如两个变元 p、q,极小项 p∧q 只在 p=1、q=1 时为真;极小项 ¬p∧q 只在 p=0、q=1 时为真。这一特性让极小项成了“赋值的编码”。反过来,极大项在全部赋值中只在一种赋值下为假。比如极大项 p∨q 只在 p=0、q=0 时为假;极大项 ¬p∨q 只在 p=1、q=0 时为假。

编号规则是考试的重头戏。对于极小项,把变元按顺序排好,变元本身记1,变元的否定记0,得到的二进制串翻译成十进制就是下标。比如两个变元时:¬p∧¬q 对应 00,记为 m₀;¬p∧q 对应 01,记为 m₁;p∧¬q 对应 10,记为 m₂;p∧q 对应 11,记为 m₃。三个变元时,¬p∧¬q∧¬r 对应 000,记为 m₀,依此类推。

极大项的编号规则跟极小项刚好相反:变元本身记0,变元的否定记1。因为极大项是“在一种赋值下为假”,这个赋值的二进制编码就是它的下标。比如两个变元时:p∨q 对应 00,记为 M₀;p∨¬q 对应 01,记为 M₁;¬p∨q 对应 10,记为 M₂;¬p∨¬q 对应 11,记为 M₃。

注意 m 小写,M 大写;m 的下标对应使该项为真的赋值,M 的下标对应使该项为假的赋值。这个对应关系搞反是常见错误,后面我会专门列一个避坑清单。

3.2 主析取范式与主合取范式的相互转换

一个公式如果有 n 个变元,它的极小项和极大项一共 2ⁿ 个。任何不是矛盾式(或不是重言式)的公式,它的主析取范式包含若干极小项,主合取范式包含若干极大项,两者的下标集合合起来正好是全集 {0, 1, …, 2ⁿ-1}。

这个互补性质非常实用。当求出一个公式的主析取范式之后,主合取范式可以直接“反着写”:看全部下标里没有出现哪些极小项,把这些编号对应的极大项用合取连接起来,就是主合取范式。反过来也一样。

举一个具体例子。某公式有两个变元,它的主析取范式是 m₁∨m₃,说明下标集合是 {1, 3}。全集是 {0,1,2,3},那么未出现的下标是 {0,2}。对应的极大项是 M₀(p∨q)和 M₂(¬p∨q),所以主合取范式就是 M₀∧M₂,也就是 (p∨q)∧(¬p∨q)。

这里有一个重要的前提:必须是有 n 个变元的标准形式,并且“全集”是按照 n 个变元来算的。如果题目中公式里有一些变元虽然在表达式中没有直接出现,但题干明确给出了变元集合,那么求主范式时必须把它们也算进去。比如公式 p∨q 在变元集合 {p,q} 下是主析取范式 m₁∨m₂∨m₃;但如果题目说变元集合是 {p,q,r},那 p∨q 就不是主范式,需要补上 r。很多人在这一步翻车。

4. 实操:一题到底,把步骤拆成模板

4.1 题目与等值演算方法步骤

我用一道常见例题来演示完整流程,题目是求公式 (p→q)∧(q→r) 的主析取范式和主合取范式。这道题变元不多不少,刚好能把所有步骤走一遍,非常适合用来建立解题模板。

第一步,消去蕴含。把 p→q 化为 ¬p∨q,把 q→r 化为 ¬q∨r。原式变成 (¬p∨q)∧(¬q∨r)。

第二步,判断是否已经是某种范式。这个式子是“两个简单析取式的合取”,所以已经是合取范式了。但它还不是主合取范式,因为第一项缺 r,第二项缺 p。

第三步,补项。补项的原则是:缺哪个变元,就用“这个变元∨它的否定”去“∧”进当前项。对于合取范式,缺项补项的公式是 A ⇔ A∨(B∧¬B),再用分配律展开。现在处理第一项 (¬p∨q):补 r,得到 (¬p∨q)∨(r∧¬r),再用分配律展开为 (¬p∨q∨r)∧(¬p∨q∨¬r)。处理第二项 (¬q∨r):补 p,得到 (¬q∨r)∨(p∧¬p),展开为 (¬q∨r∨p)∧(¬q∨r∨¬p)。

第四步,整理编号。为了对照方便,把变元顺序统一调整为 p、q、r,用“变元本身记0,否定记1”的规则给极大项编号。这里每一项都要仔细写出来。第一项展开后的两个子项是 (¬p∨q∨r) 和 (¬p∨q∨¬r),它们对应的二进制串分别是 100 和 101,所以是 M₄ 和 M₅。第二项展开后的两个子项是 (¬q∨r∨p) 和 (¬q∨r∨¬p),按 p、q、r 排序调整为 (p∨¬q∨r) 和 (¬p∨¬q∨r),二进制串分别是 010 和 110,所以是 M₂ 和 M₆。

合并所有极大项,得到主合取范式 M₂∧M₄∧M₅∧M₆。

第五步,由主合取范式反推主析取范式。三个变元的全集是 {0,1,2,3,4,5,6,7},已出现的极大项下标是 {2,4,5,6},所以未出现的下标是 {0,1,3,7}。这些下标对应的极小项分别是 m₀、m₁、m₃、m₇。于是主析取范式就是 m₀∨m₁∨m₃∨m₇。

这里要特别注意:在第三步补项时,我用的是合取范式补项的方法,展开之后得到的是极大项。如果题目要求主析取范式,其实可以直接从原式开始做析取范式的补项流程,也可以用极大项反推。实际考试中,从主合取反推主析取是最省时的,因为只需要做一次补项展开。

4.2 真值表法对照验证

等值演算的方法容易因为某一步写错而“全盘皆输”,所以我强烈建议在练习阶段用真值表法对照验证。考试时如果时间充裕,也可以在草稿纸上快速复查。

以这道题为例,公式 (p→q)∧(q→r) 的真值表共有 8 行。逐行算 (p→q) 和 (q→r),再取合取,得到结果为真的行是 000、001、011、111 四行(二进制赋值),对应十进制下标 0、1、3、7。这正好与刚才求出的主析取范式 m₀∨m₁∨m₃∨m₇ 完全吻合。

真值表法还有一个额外的好处:它能直观地解释“为什么主范式唯一”。因为一个公式在所有赋值下的真值情况是唯一的,而主析取范式恰好把所有“结果为真”的赋值对应的极小项都列了出来,所以主析取范式当然唯一。同理,主合取范式把所有“结果为假”的赋值对应的极大项都列了出来,也唯一。

我做题时的习惯是:先用真值表求出成真赋值和成假赋值,直接写出主析取范式和主合取范式的编号集合,再用等值演算验证其中一个。两种方法互相印证,一旦编号集合对不上,说明肯定有一处写错了,这时候回头检查比盲目重推高效得多。

5. 常见错误与高频考点避坑

5.1 教材里不写但考试爱考的陷阱

我在带学弟学妹复习离散数学时,发现范式的错误高度集中。下面这些坑几乎每个人都踩过,这里列成一个速查表,做题前扫一眼能省不少时间。

常见错误错误示范正确做法出错原因
主联结词判断反把 (¬p∨q)∧¬q 当成析取范式这是合取范式只看了括号里是“或”,没看最外层是“且”
否定作用域漏掉¬(p∧q) 直接当作析取范式先德摩根化成 ¬p∨¬q 再说否定符号后面是括号,必须先处理
m 和 M 编号规则混用m₀ 对应 p∧qm₀ 对应 ¬p∧¬q极小项看真赋值,极大项看假赋值,两者对应规则相反
补项只补一次(p∨q) 补成 (p∨q∨r) 就完事还要补 ¬r,得到两项每个变元有两种出现方式,缺一个变元必须补两个子项
漏掉变元全集公式没出现 r,就不补 r题干说明变元是 {p,q,r} 就必须补主范式的“全集”由变元集合决定,不由表达式决定

重点说一下补项这个坑。很多人在把合取范式变成主合取范式时,觉得“式子缺 r,那我就给它加上 r”,然后写出一项 (p∨q∨r),以为完事了。这是错的。因为主范式的每个子项必须包含所有变元,缺失的变元应该以“本身或否定”两种形式各出现一次。例如 (p∨q) 补 r,应该变成 (p∨q∨r)∧(p∨q∨¬r),两项都保留。同理,析取范式补项时也要补两个:A ⇔ A∧(B∨¬B),再分配。

另一个容易忽视的点是:题目里如果给了“变元集合”,比如“设公式含变元 p、q、r”,但公式本身写出来只有 p、q,那么求主范式时依然要按三个变元处理。平时如果不养成看题干条件的习惯,考试很容易在这种地方丢分。

5.2 快速判断与省时间的技巧

范式的题目说到底就那么几种题型:求主析取范式、求主合取范式、判断公式类型、证明两个公式等价。针对这些题型,有一些省时间的套路。

第一个技巧:先判断公式类型,再决定写哪种主范式。如果公式是重言式,它的主析取范式包含所有 2ⁿ 个极小项,主合取范式可以直接写“∅”(或省略);如果公式是矛盾式,主合取范式包含所有极大项,主析取范式可以直接写“∅”。这种情况下就不用做复杂的补项展开。

第二个技巧:利用“主析取范式等价于主合取范式的互补性”。在求出一种主范式之后,另一种直接按“全集减已出现集合”来写,不需要再从头推。前面例题已经演示过,这里再强调一遍:所求集合和未出现集合必须加起来等于全集 {0,1,…,2ⁿ-1},这是检查结果是否正确的有力工具。

第三个技巧:真值表法优先。如果公式变元不超过三个,真值表通常比等值演算更快。三变元真值表 8 行,每行判断一次公式真值,然后直接列出极小项和极大项,整个过程不超过两分钟。需要手写卷面的情况下,这个方法不容易因为步骤跳步被扣分,但在平时练习时还是要以等值演算为主,因为考试中可能有要求“用等值演算求主范式”的题目。

第四个技巧:验证主范式时,用“代入一个赋值”来快速检验。比如已经求出主析取范式是 m₁∨m₃,可以取赋值 p=0、q=1(对应下标1),看看这个赋值下原公式是否为真。如果为真,说明主范式包含 m₁ 没问题;取一个未出现的赋值 p=1、q=0(下标2),原公式应该为假。这种“抽查式验证”可以在考场上用非常有价值,能抓出不少笔误。

6. 范式在计算机里的影子

6.1 命题范式与数字电路

离散数学在很多计算机专业学生看来是“纯理论”,其实范式在数字电路里有一个非常直接的应用。数字电路中的“与或式”就是析取范式的工程化表达:每个“与门”的输出对应一个简单合取式,再用“或门”将这些输出合并。而“或与式”对应合取范式:先用“或门”生成简单析取式,再用“与门”合并。主范式则对应电路中“基于最小项/最大项的标准型设计”。

学过数电的同学对卡诺图一定不陌生。卡诺图化简的核心思想,就是在一个按格雷码排列的网格中,把相邻的极小项合并,消除互补的文字。这个操作的依据正是布尔代数中的吸收律和互补律,和离散数学里范式的等值演算是一回事。所以第三章范数学得好,数电的卡诺图、逻辑门化简会轻松不少。

反过来,如果用命题逻辑的观点看数字电路,每个门电路都可以对应一个联结词;一条电路就是一个命题公式。判断两个电路是否功能相同,不需要逐个输入测试,直接把两个公式都化成主范式,对比编号集合即可。这就是“等价性检验”的底层原理。工业界里很多硬件验证工具,核心算法之一就是把电路转换成正则形式后做比较,跟用主范式判断公式等价的思路一脉相承。

6.2 范式思想在其他领域的延伸

除了数字电路,范式这种“规范化”思维在其他领域也经常出现,举个例子,很多刚刚接触数据库的同学会把“数据库范式”和离散数学里的“命题范式”搞混。两者除了名字里都有“范式”二字,其实不是同一个概念。数据库中的第一范式、第二范式、BCNF 范式,解决的是“表结构是否存在冗余和异常”的问题,它的“范式”更像一种设计规范,而不是数学上可计算的正则形式。

不过这两种“范式”有一个共同的思维内核:标准化。数据库范式把一张表规范化成“每个属性不可再分”“非主属性完全依赖主键”等标准形态,目的和命题公式化成标准形态完全一致——消除歧义、避免冗余、让后续处理更机械可靠。包括互联网圈经常说的“反范式设计”,本质上也是在“标准化”和“性能”之间做权衡。这个权衡思路放到命题逻辑里也成立:主范式虽然标准唯一,但往往比原公式冗长,所以实际电路设计不会一股脑全用主范式,而是尽量化简。可见“规范化”并不是目标本身,手段而已。

另一个相关的热点是专家系统。比如经典的医学专家系统(常被提到的 MYCIN 系统)就用到了产生式规则,一条规则可以表示成“如果条件1且条件2,则结论”,形式化之后就是命题逻辑里的蕴含式,比如 (A∧B)→C。当系统需要进行规则推理时,可以借助范式和归结原理把知识库中的规则转换成便于机器处理的形式。这里的“把规则转成标准形式再推理”的思路,本质上就是范式思想在人工智能知识表示中的应用。

有人可能会问,命题逻辑能表达的东西很有限,为什么还要学?因为谓词逻辑是在命题逻辑基础上扩展出来的,而谓词逻辑中的很多处理方法,比如前束范式、Skolem 化,都沿用命题逻辑范式“先标准化再处理”的基本框架。把第三章的基础打牢,后面学谓词逻辑、推理理论时才不会感觉突然“换了一个世界”。

我自己在学完第三章后最大的感受是:范式就像一个“翻译器”,把人的直觉推理翻译成机器可以执行的机械步骤。数学里很多概念看似抽象,其实都是这个“标准化→机械化→自动化”链条上的一环。理解了这一点,再回头看 m₀、M₅ 这些繁琐的编号,就不会觉得它们只是无聊的符号游戏,而是一套让逻辑推理变得可计算的关键接口。

最后分享一个我教学生时常用的小技巧:在求主范式之前,先把“变元集合”写在题目旁边,再在全集 {0,1,…,2ⁿ-1} 上画一个数轴,把已经算出的下标勾出来。这样补项的时候,一眼就能看出哪些下标没出现,主范式之间的转换也会清晰很多。这个小习惯帮我省了非常多检查时间,你也可以试试。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询