Sets, Relations and Languages
Sets
Elements, Sets, and Subsets
集合(Set) 是对象的无序汇集。元素的排列顺序与重复次数不影响集合:
| 写法 | 含义 | 注意 |
|---|---|---|
| 是 的元素 | 比较一个对象与一个集合 | |
| 的每个元素都属于 | 允许 | |
| ,且 | 真子集;也写作 | |
| 两个集合的元素完全相同 | 可分别证明 与 | |
| 空集,没有元素 | 对任意 ,都有 | |
| 以 为唯一元素的单元素集 | 与 要区分 |
集合也可以作为元素,例如:
除列举元素外,还可以用条件描述集合:
空集与“包含空集的集合”不同。 没有元素, 有一个元素。
元素关系与子集关系
若 ,则 与 同时成立:前者因为整个集合 被列为一个元素,后者因为 分别属于 。
同时,,结果保留的是一个集合元素。
Set Operations and Identities
设 ,。
| 运算 | 定义 | 例子 |
|---|---|---|
| 并集 | ||
| 交集 | ||
| 差集 | ||
| 对称差 | ,只属于其中一个集合的元素 | |
| 补集 | 全集中不属于 的元素 |
若 ,称两个集合不相交。例如 。
| 规律 | 恒等式 |
|---|---|
| 幂等律 | ; |
| 交换律 | ; |
| 结合律 | ; |
| 分配律 | ; |
| 吸收律 | ; |
| 德摩根律 | ; |
Example
证明第一条德摩根律
证明 。
展开证明
记 ,。
若 ,则 ,且 、。因此 且 ,得到 ,故 。
反过来,若 ,则 同时属于 、。因此 ,但 ,得到 ,故 。
两边互相包含,所以 。
Set Families and Power Sets
集合族 的元素本身是集合。对集合族做并、交,可以写成:
这里的交集讨论非空集合族;未指定全集时,不直接套用空集合族的交集。
例如,,则 ,。若 ,则 。
幂集(Power Set) 是一个集合的所有子集组成的集合,记作 :
例如:
若 有 个元素,则 有 个元素。
Partitions
非空集合 的一个划分(Partition),是满足下列条件的集合族 :
每块非空,且 中每个元素恰好属于一块。
例如, 是 的划分; 既重复包含 ,又遗漏 ,不满足要求。偶自然数集合与奇自然数集合组成 的一个划分。
Relations and Functions
Ordered Pairs, Cartesian Products, and Relations
有序对(Ordered Pair) 保留位置:
当 时,;也允许 。这与集合的无序性、去重性质不同。
笛卡尔积(Cartesian Product) 列出两个集合之间所有可能的有序配对:
Example:
与 上的二元关系(Binary Relation) 就是 的一个子集:
例如, 是上述笛卡尔积中的一个关系。
“小于”也可以写成关系 。
关系负责从全部可能的配对中,选出满足指定条件的配对。
TIP有序 元组为 , 元关系是 的子集。若各集合相同,乘积记作 。元组的长度、位置和嵌套结构都需要保留,因此 、、、 彼此不同。
Functions
函数(Function) 是一个满足特殊条件的二元关系:
记 为 。
每个输入恰有一个输出;不同输入可以有相同输出。
| 概念 | 含义 |
|---|---|
| 定义域 | ,允许输入的对象 |
| 目标集合 | ,输出必须落入的集合 |
| 元素的像 | |
| 子集的像 | ,其中 |
| 值域 | ,实际出现的所有输出;不必等于 |
若输入是元组,通常省去一层括号。例如 ,。
Injections, Surjections, and Bijections
| 类型 | 定义 | 检查方式 |
|---|---|---|
| 单射(Injection) | 不同输入会不会合并到同一个输出? | |
| 满射(Surjection) | 是否覆盖整个目标集合 ? | |
| 双射(Bijection) | 同时是单射和满射 | 两边元素一一对应,无重复也无遗漏 |
证明单射时,也可以从 推出 。
Inverse Relations and Functions
对任意 ,交换每个有序对的两个位置,得到逆关系:
逆关系始终可以定义,但 要成为从整个 到 的函数,需要 是双射:单射保证反向输出唯一,满射保证每个 都有反向输出。
此时:
写成 ,此时返回的是一个集合,可能为空或包含多个元素。要区分“集合值的逆像”与“双射的逆函数”。
自然同构与“关系变成集合值函数”
“自然同构”描述一种自然的一一对应;
与 通过
一一对应。两种对象的括号结构不同,但信息可以无损互换。
将关系 对应到函数:
把 关联的所有 收为一个集合,即得到唯一的集合输出;没有关联对象时输出 。
反过来,由 可以恢复关系:
因此,“ 与 上的所有关系”和“ 到 的所有函数”存在一一对应。
Composition
若 、,先用 ,再用 ,得到 :
“狗 → 主人 → 主人的年龄”。
关系也可以这样复合:如果 经第一个关系关联到某个 ,而 经第二个关系关联到 ,就把 放入复合关系。
复合记号 ,即先 后 ;上述 写作 。
Types of Binary Relations
Graphs and Adjacency Matrices

考虑 。用有向图(Directed Graph) 表示时,每个元素对应一个节点; 对应一条从 指向 的边。 对应自环。这里不允许同一方向上的平行边。
邻接矩阵(Adjacency Matrix)。固定节点顺序 后,按关系定义写为:
行对应起点,列对应终点。 一个对称且不含自环的关系,可以用无向图表示,把相反方向的两条边合为一条无向边。
Basic Relation Properties
| 性质 | 定义 | 图上的含义 |
|---|---|---|
| 自反(Reflexive) | 每个节点都有自环 | |
| 对称(Symmetric) | 每条边都有反向边 | |
| 反对称(Antisymmetric) | 不同节点之间不能同时存在两个方向的边;允许自环 | |
| 传递(Transitive) | 能连续走两条边,就必须已有对应的直接边 |
反对称不等于“不是对称关系”。 等号关系既对称又反对称;也有关系既不对称,又不反对称。 “有相同父亲”具有自反性、对称性;“是父亲”具有反对称性;“是祖先”具有传递性。 上的 同时自反、反对称、传递。
Equivalence Relations and Classes
等价关系(Equivalence Relation) 同时满足自反、对称、传递。
元素 所在的等价类(Equivalence Class) 为:
Example
模 7 同余
在 上定义 当且仅当 。证明它是等价关系。
展开证明
自反: 是 7 的倍数。
对称:若 ,则 ,仍是 7 的倍数。
传递:若 、,则 。
所以该关系是等价关系。按定义得到七个等价类:
例如,。等价类的名称可以选不同代表元,但表示同一块集合。
Theorem: Equivalence Classes Form a Partition
非空集合 上的等价关系 ,其所有不同等价类构成 的划分。
展开证明
令 。
非空:自反性给出 ,所以 。
不同等价类不相交:设 ,则 、。由对称性和传递性得到 、。
对任意 ,有 ;由 与 得 ,所以 ,即 。同理 ,故 。
因此,两个等价类只要有一个公共元素,就完全相同。
覆盖:每个 都属于自己的等价类 ,所以 。
反过来,给定划分 ,定义“ 在同一块中”即可得到等价关系。因此,等价关系与划分可以相互确定。

Orders and Extremal Elements
偏序(Partial Order) 同时满足自反、反对称、传递。用 表示 。
偏序不要求任意两个元素都可比较;若进一步满足
就得到全序(Total Order)。
“祖先关系”在约定每个人也是自己的祖先后,成为偏序;不同支系的人未必可比较。自然数上的 是全序。
| 概念 | 条件 | 含义 |
|---|---|---|
| 极小元素 | 没有严格位于它之前的元素 | |
| 极大元素 | 没有严格位于它之后的元素 | |
| 最小元素 | 它位于所有元素之前或与之相同 | |
| 最大元素 | 它位于所有元素之后或与之相同 |
“极小”只排除更小者,不要求与所有其他元素可比较;“最小”提出了更强的要求。
NOTE例如,将整除偏序限制在 :令 。极小元素有 2、3 两个,最小元素不存在;6 同时是极大元素和最大元素。
非空有限偏序至少有一个极小元素;由对偶定义也至少有一个极大元素。 无限偏序没有这一保证,例如整数上的 没有极小元素。全序最多有一个极小元素;若存在,它也是最小元素。
Paths and Cycles
满足 的节点序列 称为从 到 的路径(Path),其中 。
将路径长度定义为序列中的节点数 。 这条路径经过 条边;下文有关长度的定理沿用此约定。
单节点序列 也是路径,从 到自身且不经过边。若 两两不同,且还有 ,则构成环(Cycle)。
Finite and Infinite Sets
Cardinality and Bijections
集合 等势(Equinumerous),表示存在双射 ,记作 。这里 表示集合的基数(Cardinality)。
有限集的基数是元素个数;无限集也用双射比较大小。
Example
17 的非负整数倍与完全平方数等势
一一对应,所以两者等势。
| 类型 | 定义 |
|---|---|
| 有限集 | 与某个 等势; 时为空集 |
| 可数无限集 | 与 等势 |
| 可数集(Countable Set) | 有限集或可数无限集 |
| 不可数集(Uncountable Set) | 不是可数集的集合 |
基数比较的写法:若存在单射 ,记 ;若同时不等势,记 。
证明可数无限,关键是给出无遗漏的一一编号;证明不可数,关键是说明任何声称完整的编号都会遗漏对象。
Dovetailing
交错枚举(Dovetailing) : 将多个可数集合的枚举过程交错进行,
若 、、 两两不交,可枚举为:
这样不会因为一直枚举 而永远轮不到 。集合有交叠时,跳过已经列出的重复元素即可。
对于可数无限多个可数无限集,需要每轮只处理有限多个位置,并让各位置最终都被访问。由此得到:可数无限多个可数无限集的并仍然可数无限。
Example
证明自然数对集合可数无限
证明 与 等势。

按两个坐标的和分组:
每组有限,任意 都会在和为 的一组中出现。
展开双射公式与编号推导
令 ,编号从 0 开始。在和为 的一组之前,已经有
个元素。本组从 开始, 位于组内偏移 的位置。因此:
不同组对应互不重叠的连续编号区间;同组中不同的 对应不同编号,因此是单射。所有区间首尾相接,覆盖全部自然数,因此是满射。
Infinite Sets and Proper Subsets
Example
实数集是否比开区间更大?
是否成立?两者等势。
展开双射构造
给出函数:
严格递增,值域为 ,因此 严格递增,值域恰为 。
也可以直接写出逆函数,验证每个目标点恰好对应一个输入:
所以 是双射,。区间是否有界与基数大小需要分别判断。
Example
希尔伯特旅馆
旅馆有编号 的无限多个房间,且全部住满。新来一位客人时,让原来住在 号房的客人移到 号房,腾出 1 号房给新客人。
Continuum Hypothesis
讨论自然数与实数之间是否存在中间大小的无限集合。记
连续统假设(Continuum Hypothesis) 断言不存在集合 满足 。
,在连续统假设成立时有 。
Proof Techniques
Mathematical Induction
数学归纳法(Mathematical Induction) 将无限多个命题的证明组织为“起点成立 + 从已有情形推出下一情形”。
形式为:若 满足
则 。用于命题 时,写成:
基础情形:证明 ;归纳假设:假设某个任意 下, 都成立;归纳步骤:利用假设证明 。
归纳假设不能包含尚待证明的 。题目从其他整数开始时,基础情形也相应调整。
Example
自然数求和
证明对所有 ,
展开证明
时,左边是空和,取值为 0,右边也为 0。
假设结论对 成立,则
这正是 时的公式,因此结论对所有 成立。
Example
幂集的大小
证明任意有限集合 都满足 。
展开证明:按是否包含一个固定元素分类
对 归纳。
基础情形: 时,,,所以 。
归纳步骤:设结论对大小为 的集合成立。取 ,选一个 ,令 ,则 。
的子集恰好分成两类:不含 的子集组成 ;含 的子集组成 。
两类互不相交,并通过“添入 ”一一对应。因此
辨析:为什么“所有马同色”的归纳证明失效?
先假定任意 匹马同色,再从 匹马中分别去掉一匹,试图通过两组剩余马的共同成员连接颜色。
漏洞出现在 推向 :两组都只剩一匹马,并没有共同成员,无法推出这两匹马同色。
归纳步骤必须覆盖基础情形后的每一步;后面较大规模时论证可用,无法弥补最早断掉的一步。
Pigeonhole Principle
鸽巢原理(Pigeonhole Principle):若 为有限集,且 ,则不存在从 到 的单射。
换句话说,只要函数 存在,就必有两个不同元素被映到同一个目标。
展开证明
对 归纳。
基础情形:,而 ,所以 非空。从非空集合到空集的函数都不存在,更不可能存在单射。
归纳步骤:设结论在目标集合大小不超过 时成立。现有 ,,并假设给定函数 。
选取 。若已有 满足 ,结论成立。
否则 是唯一映到 的元素。删去 及 ,得到限制函数
仍有 。由归纳假设, 不是单射,所以 也不是单射。
Example
最短路径不需要重复节点
设 是有限集合 上的关系。如果从 到 存在路径,则存在长度至多 的路径。此处长度按教材约定计节点数。
展开证明:重复节点意味着可以删掉绕行
取一条节点数最少的路径 ,其中 、。
若 ,把路径中的 个位置映到 中相应节点,由鸽巢原理存在 ,使得 。
删掉两次出现之间的绕行,得到
它仍是一条从 到 的路径;若 ,则直接在 结束。新路径更短,与最短性矛盾。
因此最短路径至多包含 个节点,即至多经过 条边。
Diagonalization
对角化(Diagonalization) 的核心构造是:针对第 个候选对象,在第 个位置故意与它不同。 这样得到的新对象不可能等于候选列表中的任何一个。
设 ,定义各行对应的集合
以及对角集合
因为 ,所以 对每个 都成立。这一理由不依赖 是否有限。
Example
有限关系中的对角集合
| 行 | 对应集合 | ? | ? |
|---|---|---|---|
| 否 | 是 | ||
| 是 | 否 | ||
| 是 | 否 | ||
| 否 | 是 | ||
| 是 | 否 | ||
| 否 | 是 |
因此 。它与第 行在元素 上不同,与第 行在元素 上不同,以此类推。
Theorem: Uncountability of the Power Set of N
不可数。
展开对角化证明
假设所有自然数子集都能枚举为 ,构造
若把 写成一行 0–1 序列,第 位表示是否包含 ,则 就是将对角线各位翻转后得到的集合。
对每个 ,,所以 。但 ,本应出现在列表中,矛盾。因此 不可数。
Example
实数不可数
使用十进制展开,证明 无法枚举,从而实数集不可数。
展开证明
假设 中所有实数都可列为 ,并写成
构造 ,其中
的第 位与 的第 位不同,因此 不等于列表中的任何 ;同时 ,矛盾。
Closures
Closure Properties
设 是讨论对象的全集, 是一条具有 个输入、一个输出位置的关系。若 满足
就称 对 封闭(Closed under )。对一组这样的关系封闭,称为一个闭包性质。
允许的规则以集合内元素为输入时,所有要求得到的结果也已经在集合内。
| 例子 | 封闭性/闭包 |
|---|---|
| 自然数 | 对加法、乘法封闭;对减法不封闭,例如 |
| 从 出发,不断相加 | 得到的闭包是 |
| 从 出发,不断相减 | 得到的闭包是整数集 |
| 从某人出发,不断加入已有成员的父母 | 得到包含本人在内的祖先集合 |
若给定初始集合 ,它在这些规则下的闭包(Closure) 是:包含 、满足指定封闭性,并且没有多余元素的最小集合。
封闭性描述一个集合是否已经满足规则;闭包描述从指定初始集合出发需要补全成什么。
Existence and Uniqueness of Closures
存在且唯一
对任意由上述关系定义的闭包性质 ,以及 ,存在唯一最小的 ,使得 且 满足 。
展开证明
令
本身就是候选集合,所以 非空。
所有候选集合都包含 ,因此 。若规则所需的输入都在 中,就都在每个 中;每个候选集合对该规则封闭,于是规则要求的输出也在每个 中,故在 中。因此 满足 。
最后, 包含于每个候选集合,因而它是最小者,也不可能有另一个不同的最小者。
Transitive and Reflexive Transitive Closures

对 ,令 。
| 闭包 | 要满足的性质 | 图上的含义 |
|---|---|---|
| 自反闭包 | 自反 | |
| 对称闭包 | 对称 | |
| 传递闭包 | 传递 | 加入原图中通过至少一条边可达的有序对 |
| 自反传递闭包 | 自反、传递 | 允许不经过边的到自身路径,故 |
Example
若 ,,则
展开证明:为什么“所有可达对”恰好是自反传递闭包?
令 ,允许单节点路径。
原有边给出路径,所以 ;单节点路径保证自反;两段路径可以接起来,保证传递。
再取任意包含 的自反、传递关系 。对一条 中的路径逐步使用传递性,其起点到终点的有序对必在 中;单节点路径对应的有序对由自反性保证。因此 。
满足所有条件且包含于每个候选关系,故 。
Closure Algorithms and Complexity
三个求有限关系 的算法。令 ,把检查、插入一个有序对视为基本操作。
| 方法 | 核心思路 | 时间上界 |
|---|---|---|
| 枚举路径 | 检查节点数不超过 的所有序列 | |
| 反复补边 | 找到一处传递性缺口,就补边并重新搜索 | |
| 按中间节点处理 | 依次允许 作为路径中间节点 |
展开增长阶定义与例子
定义:对于 ,若存在正整数常数 ,使对所有 有
则 。
当 且 时,将它们视为同一增长阶。这个关系具有自反性、对称性、传递性,因而也是一个等价关系。例如,若
就有 ,给出所需的传递性。
而 ,因此两者同阶。多项式例子假定系数非负、最高次系数为正;同次多项式同阶,次数更高的增长更快。
每个固定次数的多项式都属于 ,反方向不成立。比较
时,小规模输入的大小顺序可能与最终的增长顺序不同。增长阶关心规模扩大后的表现,常数很大不代表增长一定更快。
展开三个算法、正确性要点与共同例子
枚举路径。 从空关系 出发,枚举 中的全部序列;若 是路径,就把 加入 。单节点路径会补入所有自环。
最短路径定理保证节点数不超过 已足够覆盖所有可达对。候选序列数不超过 ,每个至多检查 次,故得到 上界。
反复补边。
C ← R ∪ I_A只要存在 a_i, a_j, a_k,使 (a_i,a_j) ∈ C 且 (a_j,a_k) ∈ C,但 (a_i,a_k) ∉ C: 将 (a_i,a_k) 加入 C 从头搜索下一处缺口返回 C至多补入 个有序对,每次搜索检查至多 个三元组,总上界为 。
正确性需要两面:终止时已经自反、传递且包含 ;每条新增边又来自原图中真实路径的拼接,因此不会超出 。
按中间节点处理。
C ← R ∪ I_Afor j = 1, ..., n: for i = 1, ..., n: for k = 1, ..., n: if (a_i,a_j) ∈ C and (a_j,a_k) ∈ C: 将 (a_i,a_k) 加入 C返回 C最外层枚举的是中间节点 。将路径中间节点的最大编号称为路径的秩;无中间节点的路径秩为 0。
归纳不变式:第 轮结束时, 恰好包含那些存在一条路径、且路径中间节点都来自 的有序对。
第 轮中新允许的路径可以在 处分成两段,两段内部只用编号更小的中间节点,因而前一轮已经知道两端分别可达 。反过来,通过 拼接也只会形成允许的路径。出现重复节点时,先删去绕行即可。
最后 覆盖全部路径,三层循环给出 上界。这一算法归于 Warshall。

反复补边法依次加入 、、;Warshall 算法在 时加入 ,在 时加入其余两对。加上初始化的自环,两者得到同一闭包。
展开一般有限闭包的计算
将反复补边推广为:从 开始,只要某条规则的全部输入已在 中、输出尚未加入,就把该输出加入 ;直到没有任何规则需要新增元素。
若 有 个元素,每次成功迭代至少增加一个元素,成功迭代次数至多为 。每次全量检查 个关系、每个关系的元数至多为 ,朴素扫描给出 的单轮上界,因此总上界为 。固定 时就是多项式时间;对固定关系组给出 。
终止时满足所有规则,且只加入规则要求的结果,因此得到最小闭包。多项式上界以规则数和元数固定为前提。
Alphabets, Strings, and Languages
Alphabets and Strings
字母表(Alphabet) 是有限的符号集合,例如 、。
字符串(String) 是字母表中符号组成的有限序列。顺序与重复次数都要保留,因此 ab 与 ba 不同,a 与 aa 也不同。
| 记号 | 含义 | 例子 |
|---|---|---|
| 空串,没有任何符号 | ||
| 字符串长度 | , | |
| 所有长度为 的字符串 | ||
| 所有有限长度字符串,包括空串 |
符号 与长度为 1 的字符串 a,通常不作区分。一个字符串也可以看作位置到符号的函数 。
例如,accordion 的第 2、3 个位置都是 c:它们是同一个符号的两次出现,位置不同。若 ,长度恰为 的字符串共有 个。
每个字符串都有限长,但允许的长度没有统一上限,因而字符串的全体可以无限。
Concatenation, Substrings, Prefixes, and Suffixes
字符串的连接(Concatenation) 或 ,表示先写 ,再写 。例如:
它满足:
连接满足结合律,一般不满足交换律,例如 ab 与 ba 不同。
| 概念 | 条件 | 例子 |
|---|---|---|
| 子串(Substring) | road 是 broader 的子串 | |
| 前缀(Prefix) | road 是 roadrunner 的前缀 | |
| 后缀(Suffix) | road 是 abroad 的后缀 |
这里 可以为空串,所以 与 自身都是 的子串,也都是其前缀、后缀。
子串对应连续的一段位置;同一子串的多次出现允许重叠。 ababab 中,ab 出现 3 次,abab 出现 2 次。
String Powers and Reversal
字符串的幂通过归纳定义:
例如 。这里表示重复连接,不涉及数值乘方。
反转(Reversal) 将符号顺序倒过来。归纳定义为:
例如 。
Example
连接后的反转
证明对任意字符串 ,
反转同时改变每个串内部的顺序与两个串的先后顺序。 例如 。
展开归纳证明
对 归纳,并让命题对任意 成立。
基础情形:,。
归纳步骤:设结论对长度不超过 的 成立。对 ,写 ,其中 、,则
Languages
字母表 上的语言(Language) 是 的任意子集:
、、 都是语言。有限语言可以逐项列出;无限语言通常描述为 。
| 语言 | 含义 |
|---|---|
| 先有若干个 ,再有同样多个 ;取 | |
| 一个 0 后接任意多个 1 | |
| 只限制数量,不限制排列方式 | |
| 回文串组成的语言 |
语言是否有限,看它有多少个字符串;字符串长度是否有限,看一个字符串有多少个符号。
Enumerating Strings
对非空有限字母表 , 可数无限。
枚举规则是:先按长度从小到大,同长度再按字典序排列。 对 ,得到:
每个长度只有有限多个串,每个有限串都能在有限位置出现,且没有重复。由于 非空,串长可以任意增大,所以集合确实无限。
空字母表,则 ,是有限集合。
Set Operations and Language Concatenation
语言可以使用并、交、差等集合运算。给定字母表后,补语言相对于 :
语言的连接定义为:
注意: 是字符串, 是语言。
Example
连接后恰好得到含奇数个 0 的串
设
则 。
展开证明
从连接结果出发: 含偶数个 0, 恰含一个 0,所以 含奇数个 0。
从任意目标串出发:设 含奇数个 0。在它的最后一个 0 之前切开,写成
前段 的 0 数量比整个 少一个,因而为偶数;后段从最后一个 0 开始,余下符号全为 1,因而属于 。所以 。
Language Powers, Kleene Star, and Positive Closure
语言的幂也按连接定义:
中仍有一个元素,即空串。 这与字符串的 所处的对象层次不同。
克林星闭包(Kleene Star) 允许从 中选取零个或多个字符串连接:
正闭包要求至少选取一个:
例如,取 ,则
每一块都来自 ,选取次数不限,也允许重复选取同一个串。
| 情形 | 结果 | 原因 |
|---|---|---|
| 任意 | 可以选择零个串 | |
| , | 没有串可选,但零次连接仍可形成空串 | |
| 任意次连接空串仍为空串 | ||
| 至少连接一个非空串,长度为正 | ||
| 一次选取空串就可以生成 |
因此,“正闭包”中的“正”指选取次数至少为 1,不保证生成的串非空。
两个层次之间的联系: 是包含 且对字符串连接封闭的最小语言; 还要求包含空串。将字母表 看成由单符号串组成的语言,做星闭包恰好得到此前定义的所有字符串 。
Example
0、1 数量不等的语言,其星闭包是什么?
设 。则
展开证明
单字符 0 和 1 各自都满足“数量不等”,所以 。
任何二进制串都可以拆成单字符后连接,因此属于 ;空串通过零次连接得到。故 。
反方向, 中各串只含 0、1,连接后也只含 0、1,所以 。
也可以使用单调性:。
Empty Language, Empty String, and Singleton Language
| 对象 | 类型 | 大小/长度 |
|---|---|---|
| 一个没有任何字符串的语言 | ||
| 一个字符串 | ||
| 只包含空串的语言 |
由连接与星闭包的定义得到关键性质:
连接 时无法从该集合选出任何一个串;连接 时可以选出空串,且不改变另一部分。对已经允许任意有限次连接的 再做星闭包,也不会产生新串。
Finite Representations of Languages
Limits of Finite Representations
有限语言可以逐项列出;无限语言虽然不能全部列出,却可能由一个有限规则描述,例如 。
一套固定的有限表示方式需要满足:表示本身是有限符号串;每个有效表示确定一个语言。一个语言可以有多个表示,但同一个表示不能同时含混地代表不同语言。
对于非空有限字母表 ,论证链为:
因此,任何这样固定的有限表示体系,都只能描述至多可数多个语言,无法覆盖全部语言。 换用更强的表示方法,可以扩大可表示的范围,但不会消除这一数量限制。
每个语言 至多可数,但所有语言组成的集合 不可数。
所有语言不可数:对角化
设 。若所有语言可枚举为 ,令
是语言,却对每个 都与 在是否包含 上不同,故不在列表中,矛盾。这是前面对 的证明在字符串集合上的应用。
Regular Expression Syntax and Semantics
正则表达式(Regular Expression) 使用基本符号以及并、连接、星运算,有限地描述语言。
将“表达式这个符号串”与“表达式表示的语言”分开,用 表示表达式 对应的语言。
| 构造规则 | 表达式的语言含义 |
|---|---|
| 空语言符号 是表达式 | |
| 每个 是表达式 | |
| 若 是表达式,则 是表达式 | |
| 若 是表达式,则 是表达式 | |
| 若 是表达式,则 是表达式 |
只有能通过这些规则有限次构造出来的符号串,才属于本节定义的正则表达式。 这是一种归纳定义。
空串不必额外列为基础表达式,因为 已经表示 ;下面在表达式中写 时,作为 的简写。
为了减少括号,以下按星号先作用,其次连接,最后取并来理解省略括号的表达式。连接和并的结合律也允许省去部分括号。
Examples
| 表达式 | 表示的字符串集合 |
|---|---|
| 任意多个 后接任意多个 ,两部分都可为空 | |
| 全为 的串,或全为 的串;包含空串 | |
| 一个 后面接全 串或全 串 | |
| 中间选一个 ;它左、右两侧各自独立选择全 串或全 串 | |
| 四个固定的 后接 ,即 |
例如,ab 属于 ,却不属于 。最后一行中的星号只作用于紧邻的最后一个 ;若要把整个块重复,需要括号。
Example
恰有两三个 1,且前两个 1 不相邻
表示:
展开
表达式为
按结构分解为:
末尾选 或 ,分别得到两个或三个 1; 保证前两个 1 不相邻。
因此 101、1011、010010 属于该语言;11 的前两个 1 相邻,10111 含四个 1,均不属于。
能否改为
Example
从表达式读出语言
Strings Ending in a
求 。
展开按语义函数计算
任意前缀后接一个 ,因此包含 a,不包含空串。
Strings Without ac
表达式
表示 上所有不含子串 ac 的字符串。
展开双向说明
正向:开头为 ,其后各块为 或 ; 后只能结束或接下一块的 ,不会出现 ac。
反向:去掉开头的 后,每段连续的 都必须紧跟 ,所以余串可拆成 或 。
例如 ccabcc 可拆为 cc、a、bcc;aac 含有 ac,不能生成。空串也在该语言中。
Strings Without 111
第一项处理完全没有 1 的串。第二项把 1 划成长度为 1 或 2 的连续块,相邻块之间至少一个 0,首尾允许任意多个 0,因此恰好排除三个连续的 1。
Regular Expression Identities
下表中的等号均指所表示的语言相等,不要求表达式的符号串相同。
| 规律 | 等式/含义 |
|---|---|
| 并的交换律 | |
| 连接的结合律 | |
| 连接对并的分配律 | ; |
| 空语言的星闭包 | |
| 星闭包的幂等性 | |
| 两组串反复连接 | |
| 增加空串不改变星闭包 |
连接一般没有交换律。 从定义看,特定的 完全可能满足 ,例如 。
展开证明:为什么两组星闭包再连接,与并后取星闭包相同?
证明 。
左边任意字符串,都由若干块 连接得到。把每块进一步拆开,其组成部分均来自 或 ,所以属于 。
反过来,,因为可以从 取空串;同样 。所以 ,再利用星闭包的单调性即可得到另一包含方向。
这里外层星号很重要。直接写成 一般不成立:取 、,右边包含 ab,左边不包含。
Regular Languages and Expressive Limits
能够被某个正则表达式表示的语言称为正则语言(Regular Language):
也可以从闭包角度理解:正则语言的全体由基础语言族
在并、连接、星闭包这三种操作下生成。这里操作的对象已经是语言,最后得到的是一个语言族。
同一个正则语言可以有无限多个正则表达式。 例如 、、 等都表示相同语言。这不违背有限表示的要求:要求的是一个表示不能同时歧义地指向不同语言。
正则表达式的表达能力有限,例如 不能由正则表达式描述。
Language Recognition and Generation
语言的有限表示分为两种重要思路:
| 方式 | 输入/出发点 | 要回答的问题 |
|---|---|---|
| 语言识别装置 | 给定一个字符串 | 是否属于 ? |
| 语言生成器 | 给定生成规则,并按规则选择 | 如何生成且只生成 中的字符串? |
Example
检查是否出现 111
逐字符扫描说明如何识别“不含 111”的二进制串:
count ← 0从左向右读取输入的每个字符: 如果读到 0:count ← 0 如果读到 1:count ← count + 1 如果 count = 3:回答“不属于”,结束读完整个字符串后,回答“属于”count 记录的是当前末尾连续的 1 的数量。例如读 11011 时,读到中间的 0 会清零,因此不会误判为出现 111。
Example
避免三个连续的 b
表达式
可以解释为:先写空串、b 或 bb;随后重复任意多次,每次写 a、ab 或 abb。按这些块的结构可见,生成串不会出现三个连续的 b。