相关笔记: 12.1 布尔函数 | 12.3 逻辑门

概览

本节讨论布尔函数的表示方法功能完备性两个核心问题。首先介绍了布尔函数的三种等价表示方式(函数表、布尔表达式、电路图),然后详细讲解了如何将任意布尔函数表示为积之和展开式(sum-of-products expansion),也称析取范式(disjunctive normal form, DNF)。接着介绍了对应的和之积展开式(product-of-sums expansion),即合取范式(conjunctive normal form, CNF)。最后证明了运算集合 功能完备的(functionally complete),并进一步展示了 甚至单个运算符 (NAND)和 (NOR)也都是功能完备的。

  • 函数表:列出所有输入组合及其对应输出值的表格
  • 文字(literal):布尔变量或其补
  • 小项(minterm):每个变量恰好出现一次(原变量或补变量)的布尔积
  • 积之和展开式(DNF):小项的布尔和,表示布尔函数
  • 和之积展开式(CNF):大项的布尔积,表示布尔函数
  • 功能完备性:一组运算符能表示所有布尔函数的性质
  • ==NAND()==:,其余为 功能完备
  • ==NOR()==:,其余为 功能完备

一、知识结构总览

graph TB
    A["12.2 布尔函数的表示 Representing Boolean Functions"] --> B["布尔函数的表示方法"]
    A --> C["积之和展开式(DNF)"]
    A --> D["和之积展开式(CNF)"]
    A --> E["功能完备性"]

    B --> B1["函数表(真值表)"]
    B --> B2["布尔表达式"]
    B --> B3["电路图(逻辑门)"]

    C --> C1["文字与小项的定义"]
    C --> C2["从函数表构造 DNF"]
    C --> C3["用布尔恒等式化简为 DNF"]
    C --> C4["DNF 的唯一性"]

    D --> D1["大项的定义"]
    D --> D2["从 DNF 取对偶得到 CNF"]
    D --> D3["从函数表直接构造 CNF"]

    E --> E1["{·,+,−} 功能完备"]
    E --> E2["{·,−} 功能完备"]
    E --> E3["{+,−} 功能完备"]
    E --> E4["{+,·} 不功能完备"]
    E --> E5["NAND {|} 功能完备"]
    E --> E6["NOR {↓} 功能完备"]

二、核心思想

核心思想

本节的核心思想是每个布尔函数都可以被"标准化"为一种统一的代数形式。积之和展开式(DNF)提供了一种系统化的方法,将任意布尔函数从函数表翻译为布尔表达式——只需找到所有使函数值为 的输入组合,为每个组合构造一个小项,然后将所有小项用布尔和连接。这一方法不仅保证了表示的存在性,还引出了功能完备性的概念:什么样的运算集合足以表示所有布尔函数?答案令人惊讶——仅用一个运算符(NAND 或 NOR)就足够了,这对数字电路的设计具有深远意义。

1. 布尔函数的表示方法

三种等价表示

布尔函数可以通过以下三种方式等价地表示:

  1. 函数表(真值表):列出所有 种输入组合及其对应的输出值
  2. 布尔表达式:用布尔变量和 运算构成的代数表达式
  3. 电路图:用逻辑门(AND、OR、NOT)连接而成的组合电路(将在 12.3 节详细讨论)

本节的核心任务之一是:给定函数表,如何构造对应的布尔表达式

2. 积之和展开式(DNF)

文字(Literal)与小项(Minterm)

  • 文字(literal):一个布尔变量或其补。例如 都是文字
  • 小项(minterm): 个变量的布尔积 ,其中每个 是第 个变量或其补

关键性质:每个小项恰好在一种输入组合下取值为 。具体地,小项 取值为 当且仅当每个 ,即当 时需要 ,当 时需要

构造小项

构造一个小项,使其在 时取值为 ,其余情况取值为

:当变量应取 时使用补变量,应取 时使用原变量:

验证:代入 ,得 。✅

积之和展开式 / 析取范式(DNF)

给定布尔函数 ,其积之和展开式(sum-of-products expansion)或析取范式(disjunctive normal form, DNF)是所有使 取值为 的输入组合对应的小项的布尔和。

构造方法:

  1. 在函数表中找到所有使 的行
  2. 为每一行构造对应的小项( 取原变量, 取补变量)
  3. 将所有小项用 连接

从函数表构造 DNF

给定函数 的函数表:

11100
11001
10110
10000
01100
01001
00100
00000

的 DNF 仅在 行,对应小项

的 DNF 两行,对应小项分别为

用布尔恒等式将表达式化为 DNF

化为积之和展开式。

方法一:利用布尔恒等式展开

方法二:构造函数表

111100
110111
101100
100111
011100
010111
001000
000010

的行:,对应小项为

两种方法结果一致。✅

每个布尔函数都有积之和展开式

每个布尔函数都可以表示为小项的布尔和(即 DNF)。

证明思路:给定 度布尔函数 的函数表,对每个使 的输入组合 ,构造小项 ,其中 (若 )或 (若 )。这个小项恰好在 处取值为 ,在其他所有输入组合处取值为 。将这些小项用 连接,得到的布尔和在 的所有输入处取值为 ,在 的所有输入处取值为 ,因此精确地表示了

3. 和之积展开式(CNF)

和之积展开式 / 合取范式(CNF)

与积之和展开式对偶的概念是和之积展开式(product-of-sums expansion)或合取范式(conjunctive normal form, CNF)。

  • 大项(maxterm) 个变量的布尔和 (或等价地,,其中 的取法与小项相反),每个大项恰好在一种输入组合下取值为
  • CNF 是所有使 的输入组合对应的大项的布尔积

CNF 可以通过取 DNF 的对偶来得到,也可以直接从函数表中构造(找到所有 的行,为每行构造大项,用 连接)。

构造 CNF

对上例中的 的行有

对应的大项分别为:

4. 功能完备性

功能完备性(Functional Completeness)

一组布尔运算符称为功能完备的(functionally complete),如果每个布尔函数都能用这些运算符表示的表达式来表示。

是功能完备的

每个布尔函数都可以表示为积之和展开式(DNF),而 DNF 仅使用 三种运算。因此 是功能完备的。

更小的功能完备集合

(1) 是功能完备的

利用德摩根律和对合律,可以消去所有布尔和:

因此任何使用 的表达式都可以改写为仅使用 的表达式。

(2) 是功能完备的

利用另一条德摩根律和对合律,可以消去所有布尔积:

因此 也是功能完备的。

(3) 不是功能完备的

仅使用 无法表示补函数 。因为对任何仅含 的表达式,当所有变量取值为 时,表达式的值为 ;当所有变量取值为 时,表达式的值为 。但 时为 ,在 时为 ,不可能用 表示。

NAND 运算符与 NOR 运算符

  • NAND(Not AND,记为 ):
  • NOR(Not OR,记为 ):

NAND 和 NOR 各自功能完备

(NAND)是功能完备的

因为 功能完备,只需证明 都可以用 表示:

(NOR)是功能完备的

类似地,,再利用 即可表示所有运算。

这意味着仅用一种逻辑门(NAND 门或 NOR 门)就可以构建任意布尔函数的电路,这对简化电路设计具有重要意义。

注意:功能完备性的实用意义

虽然 在理论上功能完备,但在实际电路设计中,使用单一 NAND/NOR 门构建的电路通常比使用 AND/OR/NOT 门组合的电路需要更多的门。功能完备性主要的理论价值在于:(1) 证明了布尔运算的冗余性;(2) 为集成电路的标准化设计提供了基础(许多 IC 芯片只提供 NAND 门)。


三、补充理解与易混淆点

补充理解

补充1:DNF/CNF 与命题逻辑的联系

析取范式(DNF)和合取范式(CNF)与第 1 章命题逻辑中的概念直接对应。在命题逻辑中,DNF 是主析取范式(由若干小项的析取构成),CNF 是主合取范式(由若干大项的合取构成)。两者的翻译规则完全一致:布尔和 析取 ,布尔积 合取 ,补 否定 。DNF 和 CNF 在命题逻辑中用于判断命题公式的类型(重言式、矛盾式、可满足式),在布尔代数中用于标准化布尔函数的表示,在数字电路中用于系统化地设计组合逻辑电路。

来源:Rosen, K. H. (2019). Discrete Mathematics and Its Applications (8th ed.), McGraw-Hill, Section 12.2.

补充2:功能完备性的理论背景

功能完备性的概念由波兰裔美国数学家Emil Post 于 1921 年在其经典论文中首次系统研究。Post 证明了:要判断一组布尔运算是否功能完备,只需验证该运算集合能否表示以下五个”封闭类”之外的函数:(1) 保持 的函数类 ;(2) 保持 的函数类 ;(3) 单调函数类 ;(4) 自对偶函数类 ;(5) 线性函数类 。这就是著名的Post 完备性定理(Post’s completeness theorem)。NAND 和 NOR 之所以各自功能完备,正是因为它们不属于上述任何一个封闭类。

来源:Post, E. L. (1921). “Introduction to a General Theory of Elementary Propositions.” American Journal of Mathematics, 43(3), 163–185.

易混淆点

误区1:DNF 中的小项必须包含所有变量

  • ❌ 认为 已经是 DNF
  • ✅ 严格意义上的 DNF(即积之和展开式)中,每个乘积项(小项)必须包含所有变量(以原变量或补变量的形式各出现恰好一次)。 缺少变量 (第一项)和 (第二项),不是标准 DNF
  • 但在实际应用中,“DNF”一词有时也泛指”乘积项之和”的形式(不一定每个项都包含所有变量),需要注意上下文区分

误区2: 不功能完备

  • ❌ 认为 能表示所有布尔函数(因为它们是两种基本运算)
  • 无法表示补运算 。关键观察:仅用 构造的表达式具有”单调性”——将某个变量从 改为 不会使表达式的值从 变为 。但 不满足单调性(),因此无法用 表示

误区3:NAND 不是 NOR

  • ❌ 混淆 NAND()和 NOR()的运算规则
  • ✅ NAND = “Not AND”:只有当两个输入都为 时输出 ,否则输出
  • ✅ NOR = “Not OR”:只有当两个输入都为 时输出 ,否则输出
  • 记忆口诀:NAND 是 AND 的否定(全 ),NOR 是 OR 的否定(全

四、习题精选

习题概览

题号范围核心考点难度
1-2从函数表构造 DNF⭐⭐
3-4用布尔恒等式展开为 DNF⭐⭐⭐
5-6求布尔函数的 CNF⭐⭐
7-8DNF 与 CNF 的互化⭐⭐⭐
10直接构造 CNF⭐⭐
14-16NAND/NOR 的功能完备性验证⭐⭐
19证明 不功能完备⭐⭐⭐

题1:从函数表构造 DNF

题目

给定布尔函数 的函数表如下,求其积之和展开式(DNF)。

1111
1100
1011
1000
0110
0101
0010
0001

题2:用布尔恒等式展开为 DNF

题目

展开为积之和展开式。

题3:构造 CNF

题目

求题 1 中函数 的和之积展开式(CNF)。

题4:NAND 功能完备性验证

题目

仅使用 NAND 运算符 ,表示以下布尔函数:(a) ;(b) ;(c)

题5:证明 不功能完备

题目

证明仅使用 运算无法表示布尔函数

解题思路提示

布尔函数表示问题的解题方法论:

  1. 从函数表构造 DNF:找到所有 的行,每行构造一个小项,用 连接
  2. 从函数表构造 CNF:找到所有 的行,每行构造一个大项,用 连接
  3. 用恒等式展开为 DNF:反复使用分配律展开乘积,用幺元律()补全缺失变量,用幂等律合并重复项
  4. 验证功能完备性:证明目标运算集合能表示 (因为它们已知功能完备)
  5. 证明不功能完备:找到一个不能用目标集合表示的布尔函数(如

五、视频学习指南

视频资源

资源链接对应内容备注
Rosen 8e Section 12.2教材原文完整定义、定理与例题英文教材
Neso Academy - DNF & CNF链接标准形的构造方法英文,适合入门
Ben Eater - NAND Logic链接用 NAND 门构建计算机英文,实践导向

六、教材原文

教材原文

“Two important problems of Boolean algebra will be studied in this section. The first problem is: Given the values of a Boolean function, how can a Boolean expression that represents this function be found? … The second problem is: Is there a smaller set of operators that can be used to represent all Boolean functions?”

“A literal is a Boolean variable or its complement. A minterm of the Boolean variables is a Boolean product , where or .”

“The sum of minterms that represents the function is called the sum-of-products expansion or the disjunctive normal form of the Boolean function.”

“Because every Boolean function can be represented using these operators we say that the set is functionally complete.”

“Both of the sets and are functionally complete.”

—— Rosen, Section 12.2, pp. 855–857


参见 Wiki

  • 命题逻辑 — DNF/CNF 与主析取/合取范式的对应(第1章)
  • 逻辑等价 — 布尔恒等式与逻辑等价式的翻译(第1章)

布尔代数