NBG 集合论与二元关系
关系把对象之间的联系写成集合语言。函数、同余、整除、字典序,都可以看成某种关系。函数是关系的特例:每个原象只对应一个象。
日常例子已经够用:
学生学号对应成绩。每个学号恰好配一个成绩,这是函数关系。
“生日相同”在人与人之间是等价关系:自己与自己同日生,关系对称,也传递。
数值高度具有通常的大小顺序。但在书本身上定义“高度不超过”,只会得到预序:两本不同的书可能同高,因此反对称性可能不成立。
从初等集合到类
朴素集合论 用直观语言介绍常见集合构造,并明确从哪个集合中选取元素,并没有假设任意描述都能定义一个集合。导致矛盾的是无限制概括 :如果把罗素汇集 R = { x : x ∉ x } R=\{x:x\notin x\} R = { x : x ∈ / x } 当成集合,就会得到 R ∈ R R\in R R ∈ R 当且仅当 R ∉ R R\notin R R ∈ / R 。
本章引入 NBG(von Neumann–Bernays–Gödel)集合论的语言,以便同时讨论集合与更大的汇集。这是本章采用的基础框架;在普通集合上定义序关系,并不需要先用到真类。集合 A A A 上的关系本来就可以表示为 A × A A\times A A × A 的子集[1] [1] T. Banakh, “Classical Set Theory: Theory of Sets and Classes,” arXiv:2006.01613, 2026. Version 6, August 15, 2026; NBG sets, classes, and class existence. https://arxiv.org/abs/2006.01613 。
定义 集合与真类
在 NBG 的单论域表述中,讨论的对象都是类,而类的每个元素都是集合。能够作为另一个类之元素的类叫作集合;不是集合的类叫作真类 。因此,集合都是类,但真类不能成为元素。
所有集合组成的类 V V V 、所有序数组成的类,都是真类。允许将这些汇集作为类来讨论,并不意味着它们成了集合,也不意味着任意类都能成为元素。
外延性与初等类概括
公理 类的外延公理
两个类有完全相同的元素,就相等:
∀ A ∀ B ( ∀ x ( x ∈ A ↔ x ∈ B ) → A = B ) . \forall A\,\forall B\bigl(\forall x\,(x\in A\leftrightarrow x\in B)\to A=B\bigr). ∀ A ∀ B ( ∀ x ( x ∈ A ↔ x ∈ B ) → A = B ) .
公理 初等类概括
设公式 P ( x ) P(x) P ( x ) 中的量词只对集合取值,允许出现固定的集合参数与类参数。则存在类
C = { x : x 是集合且 P ( x ) } . C=\{x:x\text{ 是集合且 }P(x)\}. C = { x : x 是集合且 P ( x )} . 也就是说,u ∈ C u\in C u ∈ C 当且仅当 u u u 是集合且 P ( u ) P(u) P ( u ) 成立。这里是对公式有所限制的公理模式,不能任意允许量词遍历类。
这些原则说明后面如何构造类,并不构成 NBG 的完整公理清单。仅仅引入“类”这个名称,也不能自动解决所有集合存在性问题。不同文献对选择公理的约定还可能不同,用到时需要明确说明。
类的性质与运算
并与交的写法与朴素集合论相同。对类 A A A 、B B B ,
A ∪ B = { x : ( x ∈ A ) ∨ ( x ∈ B ) } , A ∩ B = { x : ( x ∈ A ) ∧ ( x ∈ B ) } . \begin{aligned}
A\cup B&=\{x:(x\in A)\lor(x\in B)\},\\
A\cap B&=\{x:(x\in A)\land(x\in B)\}.
\end{aligned} A ∪ B A ∩ B = { x : ( x ∈ A ) ∨ ( x ∈ B )} , = { x : ( x ∈ A ) ∧ ( x ∈ B )} .
幂等、结合、交换、分配仍然成立:
∀ X ( X ∪ X = X ) , ∀ X ( X ∩ X = X ) , ∀ X ∀ Y ∀ Z ( X ∪ ( Y ∪ Z ) = ( X ∪ Y ) ∪ Z ) , ∀ X ∀ Y ∀ Z ( X ∩ ( Y ∩ Z ) = ( X ∩ Y ) ∩ Z ) , ∀ X ∀ Y ( X ∪ Y = Y ∪ X ) , ∀ X ∀ Y ( X ∩ Y = Y ∩ X ) , ∀ X ∀ Y ∀ Z ( X ∪ ( Y ∩ Z ) = ( X ∪ Y ) ∩ ( X ∪ Z ) ) , ∀ X ∀ Y ∀ Z ( X ∩ ( Y ∪ Z ) = ( X ∩ Y ) ∪ ( X ∩ Z ) ) . \begin{aligned}
\forall X\,(X\cup X=X),&\quad
\forall X\,(X\cap X=X),
\\
\forall X\forall Y\forall Z\bigl(X\cup(Y\cup Z)=(X\cup Y)\cup Z\bigr),
\\
\forall X\forall Y\forall Z\bigl(X\cap(Y\cap Z)=(X\cap Y)\cap Z\bigr),
\\
\forall X\forall Y\,(X\cup Y=Y\cup X),&\quad
\forall X\forall Y\,(X\cap Y=Y\cap X),
\\
\forall X\forall Y\forall Z\bigl(X\cup(Y\cap Z)=(X\cup Y)\cap(X\cup Z)\bigr),
\\
\forall X\forall Y\forall Z\bigl(X\cap(Y\cup Z)=(X\cap Y)\cup(X\cap Z)\bigr).
\end{aligned} ∀ X ( X ∪ X = X ) , ∀ X ∀ Y ∀ Z ( X ∪ ( Y ∪ Z ) = ( X ∪ Y ) ∪ Z ) , ∀ X ∀ Y ∀ Z ( X ∩ ( Y ∩ Z ) = ( X ∩ Y ) ∩ Z ) , ∀ X ∀ Y ( X ∪ Y = Y ∪ X ) , ∀ X ∀ Y ∀ Z ( X ∪ ( Y ∩ Z ) = ( X ∪ Y ) ∩ ( X ∪ Z ) ) , ∀ X ∀ Y ∀ Z ( X ∩ ( Y ∪ Z ) = ( X ∩ Y ) ∪ ( X ∩ Z ) ) . ∀ X ( X ∩ X = X ) , ∀ X ∀ Y ( X ∩ Y = Y ∩ X ) ,
定义 类的补
把 x ∉ y x\notin y x ∈ / y 当作 ¬ ( x ∈ y ) \neg(x\in y) ¬ ( x ∈ y ) 的缩写。类 A A A 的补是
∼ A = { x : x ∉ A } . \sim A=\{x:x\notin A\}. ∼ A = { x : x ∈ / A } .
定义 类的差
对类 A A A 、B B B ,差集为
A ∼ B 或 A − B = { x : ( x ∈ A ) ∧ ( x ∉ B ) } = A ∩ ( ∼ B ) . A\sim B
\quad\text{或}\quad
A-B
=\{x:(x\in A)\land(x\notin B)\}
=A\cap(\sim B). A ∼ B 或 A − B = { x : ( x ∈ A ) ∧ ( x ∈ / B )} = A ∩ ( ∼ B ) .
双重否定与 De Morgan 律对类同样成立。空类与全集类也有。
定义 空类与全集类
∅ = { x : x ≠ x } , V = { x : x = x } . \emptyset=\{x:x\neq x\},
\qquad
V=\{x:x=x\}. ∅ = { x : x = x } , V = { x : x = x } .
对一个类还可以做一元的并与交,这与两个类之间的二元运算不是同一层。
定义 类的并与交
设 A A A 是类。它的并与交分别是
⋃ A = { x : ( ∃ y ) ( ( y ∈ A ) ∧ ( x ∈ y ) ) } , ⋂ A = { x : ( ∀ y ) ( ( y ∈ A ) → ( x ∈ y ) ) } . \begin{aligned}
\bigcup A&=\{x:(\exists y)((y\in A)\land(x\in y))\},
\\
\bigcap A&=\{x:(\forall y)((y\in A)\to(x\in y))\}.
\end{aligned} ⋃ A ⋂ A = { x : ( ∃ y ) (( y ∈ A ) ∧ ( x ∈ y ))} , = { x : ( ∀ y ) (( y ∈ A ) → ( x ∈ y ))} . 这里 x x x 是集合,y y y 是类。
于是 C ∈ ⋃ A C\in\bigcup A C ∈ ⋃ A 当且仅当 C C C 是集合,并且属于 A A A 的某个成员;C ∈ ⋂ A C\in\bigcap A C ∈ ⋂ A 当且仅当 C C C 是集合,并且属于 A A A 的每一个成员。
集合的并、交作用在两个集合上。类的并、交作用在一个类的全部成员上,结果通常仍是类,不必是集合。
引理 空类的并与交
⋂ ∅ = V \bigcap\emptyset=V ⋂ ∅ = V ,且 ⋃ ∅ = ∅ \bigcup\emptyset=\emptyset ⋃ ∅ = ∅ 。
证明
设 C C C 是类。则 C ∈ ⋂ ∅ C\in\bigcap\emptyset C ∈ ⋂ ∅ 当且仅当 C C C 是集合,并且属于 ∅ \emptyset ∅ 的每一个成员。空类没有任何成员,后半句对每个集合都成立,因此这等价于“C C C 是集合”,也就是 C ∈ V C\in V C ∈ V 。由外延公理,⋂ ∅ = V \bigcap\emptyset=V ⋂ ∅ = V 。
另一方面,C ∈ ⋃ ∅ C\in\bigcup\emptyset C ∈ ⋃ ∅ 当且仅当 C C C 是集合,并且存在 x ∈ ∅ x\in\emptyset x ∈ ∅ 使 C ∈ x C\in x C ∈ x 。空类没有成员,所以这等价于 C ∈ ∅ C\in\emptyset C ∈ ∅ 。再由外延公理,⋃ ∅ = ∅ \bigcup\emptyset=\emptyset ⋃ ∅ = ∅ 。
定义 类的包含
若 A A A 、B B B 是类,且
∀ x ( ( x ∈ A ) → ( x ∈ B ) ) , \forall x\bigl((x\in A)\to(x\in B)\bigr), ∀ x ( ( x ∈ A ) → ( x ∈ B ) ) , 则称 A A A 包含于 B B B ,或 A A A 是 B B B 的子类,记 A ⊆ B A\subseteq B A ⊆ B 。若 A A A 还是集合,则称 A A A 是 B B B 的子集。若 A ⊆ B A\subseteq B A ⊆ B 且存在集合 b ∈ B ∖ A b\in B\setminus A b ∈ B ∖ A ,则称 A A A 真包含于 B B B ,记 A ⊂ B A\subset B A ⊂ B 。
幂类 P ( A ) = { x : x ⊆ A } P(A)=\{x:x\subseteq A\} P ( A ) = { x : x ⊆ A } 是 A A A 的全部子集组成的类。这引出幂集公理。
公理 幂集公理
对每个集合 x x x ,存在集合 y y y ,使得 u ∈ y u\in y u ∈ y 当且仅当 u ⊆ x u\subseteq x u ⊆ x 。
因此集合 x x x 的每个子类实际上都是集合,并且 P ( x ) P(x) P ( x ) 本身也是集合,通常就叫 x x x 的幂集。
公理 配对公理
对任意集合 x x x 、y y y ,类 { z : ( z = x ) ∨ ( z = y ) } \{z:(z=x)\lor(z=y)\} { z : ( z = x ) ∨ ( z = y )} 是集合。
这个集合记作 { x , y } \{x,y\} { x , y } ,叫做无序对。若 x = y x=y x = y ,则记作 { x } \{x\} { x } ,叫做单点集。
公理 并公理
对每个集合 x x x ,类 ⋃ x \bigcup x ⋃ x 是集合。
有序对定义为 ( a , b ) = { { a } , { a , b } } (a,b)=\{\{a\},\{a,b\}\} ( a , b ) = {{ a } , { a , b }} 。类 A A A 、B B B 的笛卡尔积是
A × B = { t : ( ∃ x ) ( ∃ y ) ( ( x ∈ A ) ∧ ( y ∈ B ) ∧ ( t = ( x , y ) ) ) } , A\times B
=\{t:(\exists x)(\exists y)\bigl((x\in A)\land(y\in B)\land(t=(x,y))\bigr)\}, A × B = { t : ( ∃ x ) ( ∃ y ) ( ( x ∈ A ) ∧ ( y ∈ B ) ∧ ( t = ( x , y )) ) } ,
也就是第一分量在 A A A 、第二分量在 B B B 的全部有序对。若 P ( x , y ) P(x,y) P ( x , y ) 是开语句,把
{ ( x , y ) : P ( x , y ) } \{(x,y):P(x,y)\} {( x , y ) : P ( x , y )}
当作
{ t : ( ∃ x ) ( ∃ y ) ( ( t = ( x , y ) ) ∧ P ( x , y ) ) } \{t:(\exists x)(\exists y)\bigl((t=(x,y))\land P(x,y)\bigr)\} { t : ( ∃ x ) ( ∃ y ) ( ( t = ( x , y )) ∧ P ( x , y ) ) }
的缩写,于是
A × B = { ( x , y ) : ( x ∈ A ) ∧ ( y ∈ B ) } . A\times B=\{(x,y):(x\in A)\land(y\in B)\}. A × B = {( x , y ) : ( x ∈ A ) ∧ ( y ∈ B )} .
二元关系、复合与逆
两个集合 A A A 、B B B 之间理论上可以有各种各样的配对。A × B A\times B A × B 收集全部有序对,P ( A × B ) P(A\times B) P ( A × B ) 的每个元素对应一种可能的配对方式。欧氏平面里的圆、函数图像,都是这种配对的特例。
定义 二元关系
从集合 A A A 到集合 B B B 的二元关系 R R R 是笛卡尔积 A × B A\times B A × B 的子集。若 ( a , b ) ∈ R (a,b)\in R ( a , b ) ∈ R ,就说 a a a 与 b b b 有关系 R R R ,记 a R b aRb a R b ,否定则写 a R̸ b a\not R b a R b 。
用类来写,定义可以更一般。
定义 作为有序对之类的关系
关系就是由有序对组成的类。对关系 R R R ,定义
Dom R = { x : ( ∃ y ) ( ( x , y ) ∈ R ) } , Range R = { y : ( ∃ x ) ( ( x , y ) ∈ R ) } . \begin{aligned}
\operatorname{Dom} R&=\{x:(\exists y)\,((x,y)\in R)\},
\\
\operatorname{Range} R&=\{y:(\exists x)\,((x,y)\in R)\}.
\end{aligned} Dom R Range R = { x : ( ∃ y ) (( x , y ) ∈ R )} , = { y : ( ∃ x ) (( x , y ) ∈ R )} . 若 ( x , y ) ∈ R (x,y)\in R ( x , y ) ∈ R ,称 x x x 与 y y y R R R -相关,y y y 是 x x x 的一个 R R R -相对。定义域是所有具有 R R R -相对的集合,值域是所有作为 R R R -相对出现的集合。
例 平面上的圆与抛物线
平面上全体点组成的集合里,方程 x 2 + y 2 = r 2 x^2+y^2=r^2 x 2 + y 2 = r 2 给出一个关系:所有落在圆上的点 ( x , y ) (x,y) ( x , y ) 。对多数 x x x ,对应两个 y y y (正负各一),所以这不是函数。对比之下,y = x 2 y=x^2 y = x 2 对每个 x x x 只给出一个 y y y ,才是函数。
下图把圆关系与二次函数画在一起:函数不会让同一个 x x x 对应两个 y y y ,圆可以。
例 整除关系
设 A = { 1 , 2 , 3 , 4 } A=\{1,2,3,4\} A = { 1 , 2 , 3 , 4 } 。关系 R = { ( a , b ) : a 整除 b } R=\{(a,b):a\text{ 整除 }b\} R = {( a , b ) : a 整除 b } 里有哪些有序对?
因为 ( a , b ) ∈ R (a,b)\in R ( a , b ) ∈ R 当且仅当 a a a 、b b b 都是不超过 4 4 4 的正整数且 a a a 整除 b b b ,所以
R = { ( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 2 ) , ( 2 , 4 ) , ( 3 , 3 ) , ( 4 , 4 ) } . R=\{(1,1),(1,2),(1,3),(1,4),(2,2),(2,4),(3,3),(4,4)\}. R = {( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 2 ) , ( 2 , 4 ) , ( 3 , 3 ) , ( 4 , 4 )} . 这也不是函数:同一个 a a a 可以对应多个 b b b 。
定义 函数关系
若定义域中每个元素恰好有一个 R R R -相对,则称 R R R 是函数关系 ,也叫函数 。此时把 a a a 的那个唯一相对记作 R ( a ) R(a) R ( a ) 。
公理 替换公理
对每个函数关系 R R R ,若 Dom R \operatorname{Dom} R Dom R 是集合,则 Range R \operatorname{Range} R Range R 也是集合。
映射、复合与逆
有了类,可以把映射写得更干净。
定义 映射
映射是有序对 ( ( A , B ) , R ) ((A,B),R) (( A , B ) , R ) ,其中 A A A 、B B B 是集合,R R R 是 A A A 与 B B B 之间的函数关系,且 Dom R = A \operatorname{Dom} R=A Dom R = A 。若 f = ( ( A , B ) , R ) f=((A,B),R) f = (( A , B ) , R ) ,称 f f f 是从 A A A 到 B B B 的映射,A A A 是定义域,B B B 是陪域,R R R 是图像,常写 f : A → B f:A\to B f : A → B 。对 a ∈ A a\in A a ∈ A ,集合 R → ( { a } ) R^{\to}(\{a\}) R → ({ a }) 只含 B B B 中一个元素,记作 f ( a ) f(a) f ( a ) ,叫做 a a a 在 f f f 下的像。
要给出一个映射,必须同时交代定义域、陪域,以及每个原象的像。对 X ⊆ A X\subseteq A X ⊆ A ,把 R → ( X ) R^{\to}(X) R → ( X ) 记作 f → ( X ) f^{\to}(X) f → ( X ) ;对 Y ⊆ B Y\subseteq B Y ⊆ B ,把 R ← ( Y ) R^{\leftarrow}(Y) R ← ( Y ) 记作 f ← ( Y ) f^{\leftarrow}(Y) f ← ( Y ) 。f f f 在子集 A 1 ⊆ A A_1\subseteq A A 1 ⊆ A 上的限制是
f ∣ A 1 = ( ( A 1 , B ) , R ∩ ( A 1 × B ) ) . f\mid A_1=\bigl((A_1,B),\,R\cap(A_1\times B)\bigr). f ∣ A 1 = ( ( A 1 , B ) , R ∩ ( A 1 × B ) ) .
函数能复合、能求逆。关系同样可以。
定义 满射、单射与双射
设 f = ( ( A , B ) , R ) f=((A,B),R) f = (( A , B ) , R ) 。若 Range R = B \operatorname{Range} R=B Range R = B ,即 B B B 中每个元素都至少是某个原象的像,则称 f f f 为满射 。
若逆关系 R − 1 R^{-1} R − 1 仍是函数关系,则称 f f f 为单射 。等价地说,f ( a 1 ) = f ( a 2 ) f(a_1)=f(a_2) f ( a 1 ) = f ( a 2 ) 蕴含 a 1 = a 2 a_1=a_2 a 1 = a 2 。
既单又满则称双射 。若存在从 A A A 到 B B B 的双射,称 A A A 与 B B B 等势。
( ( B , A ) , R − 1 ) ((B,A),R^{-1}) (( B , A ) , R − 1 ) 是映射当且仅当 f f f 是双射;此时记 f − 1 = ( ( B , A ) , R − 1 ) f^{-1}=((B,A),R^{-1}) f − 1 = (( B , A ) , R − 1 ) ,叫做 f f f 的逆映射。
例 满射
A = { 1 , 2 , 3 } A=\{1,2,3\} A = { 1 , 2 , 3 } ,B = { a , b } B=\{a,b\} B = { a , b } ,令 f ( 1 ) = a f(1)=a f ( 1 ) = a ,f ( 2 ) = a f(2)=a f ( 2 ) = a ,f ( 3 ) = b f(3)=b f ( 3 ) = b 。B B B 中每个元素都有原象,所以 f f f 是满射。
例 单射
A = { 1 , 2 , 3 } A=\{1,2,3\} A = { 1 , 2 , 3 } ,B = { a , b , c , d } B=\{a,b,c,d\} B = { a , b , c , d } ,令 f ( 1 ) = a f(1)=a f ( 1 ) = a ,f ( 2 ) = b f(2)=b f ( 2 ) = b ,f ( 3 ) = c f(3)=c f ( 3 ) = c 。不同原象映到不同像,所以 f f f 是单射。
例 双射
A = { 1 , 2 , 3 } A=\{1,2,3\} A = { 1 , 2 , 3 } ,B = { a , b , c } B=\{a,b,c\} B = { a , b , c } ,令 f ( 1 ) = a f(1)=a f ( 1 ) = a ,f ( 2 ) = b f(2)=b f ( 2 ) = b ,f ( 3 ) = c f(3)=c f ( 3 ) = c 。f f f 既单又满,因此 A A A 与 B B B 等势。
例 逆映射
对上一例的双射,f − 1 ( a ) = 1 f^{-1}(a)=1 f − 1 ( a ) = 1 ,f − 1 ( b ) = 2 f^{-1}(b)=2 f − 1 ( b ) = 2 ,f − 1 ( c ) = 3 f^{-1}(c)=3 f − 1 ( c ) = 3 。
定义 关系的复合
若 R R R 、S S S 是关系,复合 S ∘ R S\circ R S ∘ R 为
S ∘ R = { ( x , z ) : ( ∃ y ) ( ( ( x , y ) ∈ R ) ∧ ( ( y , z ) ∈ S ) ) } . S\circ R
=\{(x,z):(\exists y)\bigl(((x,y)\in R)\land((y,z)\in S)\bigr)\}. S ∘ R = {( x , z ) : ( ∃ y ) ( (( x , y ) ∈ R ) ∧ (( y , z ) ∈ S ) ) } . 若 R R R 从 A A A 到 B B B ,S S S 从 B B B 到 C C C ,则 S ∘ R S\circ R S ∘ R 从 A A A 到 C C C ,并且 Dom ( S ∘ R ) ⊆ Dom R \operatorname{Dom}(S\circ R)\subseteq\operatorname{Dom} R Dom ( S ∘ R ) ⊆ Dom R ,Range ( S ∘ R ) ⊆ Range S \operatorname{Range}(S\circ R)\subseteq\operatorname{Range} S Range ( S ∘ R ) ⊆ Range S 。
定义 映射的复合
设 f = ( ( A , B ) , R ) f=((A,B),R) f = (( A , B ) , R ) ,g = ( ( B , C ) , S ) g=((B,C),S) g = (( B , C ) , S ) 。则 ( ( A , C ) , S ∘ R ) ((A,C),S\circ R) (( A , C ) , S ∘ R ) 仍是映射,记作 g ∘ f g\circ f g ∘ f ,并对每个 a ∈ A a\in A a ∈ A 满足 ( g ∘ f ) ( a ) = g ( f ( a ) ) (g\circ f)(a)=g(f(a)) ( g ∘ f ) ( a ) = g ( f ( a )) 。
定义 类之间的关系与逆
类 A A A 、B B B 之间的关系是 A × B A\times B A × B 的子类,即满足 Dom R ⊆ A \operatorname{Dom} R\subseteq A Dom R ⊆ A 且 Range R ⊆ B \operatorname{Range} R\subseteq B Range R ⊆ B 的关系。类 A A A 上的关系是 A × A A\times A A × A 的子类。
逆关系为
R − 1 = { ( x , y ) : ( y , x ) ∈ R } . R^{-1}=\{(x,y):(y,x)\in R\}. R − 1 = {( x , y ) : ( y , x ) ∈ R } . 若 R R R 从 A A A 到 B B B ,则 R − 1 R^{-1} R − 1 从 B B B 到 A A A ,并且 Dom R − 1 = Range R \operatorname{Dom} R^{-1}=\operatorname{Range} R Dom R − 1 = Range R ,Range R − 1 = Dom R \operatorname{Range} R^{-1}=\operatorname{Dom} R Range R − 1 = Dom R 。
A A A 在 R R R 下的像是 A A A 中成员的全部 R R R -相对:
R → ( A ) = { y : ( ∃ x ) ( ( x ∈ A ) ∧ ( ( x , y ) ∈ R ) ) } . R^{\to}(A)=\{y:(\exists x)\bigl((x\in A)\land((x,y)\in R)\bigr)\}. R → ( A ) = { y : ( ∃ x ) ( ( x ∈ A ) ∧ (( x , y ) ∈ R ) ) } .
逆像 R ← ( B ) R^{\leftarrow}(B) R ← ( B ) 就是 ( R − 1 ) → ( B ) (R^{-1})^{\to}(B) ( R − 1 ) → ( B ) :
R ← ( B ) = { x : ( ∃ y ) ( ( y ∈ B ) ∧ ( ( x , y ) ∈ R ) ) } . R^{\leftarrow}(B)=\{x:(\exists y)\bigl((y\in B)\land((x,y)\in R)\bigr)\}. R ← ( B ) = { x : ( ∃ y ) ( ( y ∈ B ) ∧ (( x , y ) ∈ R ) ) } .
定义 对角关系
对集合 A A A ,令
D A = { x : ( ∃ a ) ( ( a ∈ A ) ∧ ( x = ( a , a ) ) ) } , D_A=\{x:(\exists a)\bigl((a\in A)\land(x=(a,a))\bigr)\}, D A = { x : ( ∃ a ) ( ( a ∈ A ) ∧ ( x = ( a , a )) ) } , 叫做 A × A A\times A A × A 的对角线。D A D_A D A 是 A A A 上的函数关系,定义域为 A A A 。映射 I A = ( ( A , A ) , D A ) I_A=((A,A),D_A) I A = (( A , A ) , D A ) 叫做 A A A 的恒等映射,对每个 a ∈ A a\in A a ∈ A 都有 I A ( a ) = a I_A(a)=a I A ( a ) = a 。
例 恒等映射
恒等映射把每个元素送到自己。
B = { x ∈ R : − 1 ≤ x ≤ 1 } B=\{x\in\mathbb{R}:-1\le x\le 1\} B = { x ∈ R : − 1 ≤ x ≤ 1 } 上,I B ( x ) = x I_B(x)=x I B ( x ) = x 。
C = { apple , banana , cherry } C=\{\text{apple},\text{banana},\text{cherry}\} C = { apple , banana , cherry } 上,I C I_C I C 把每种水果送到它自己。
D = Z D=\mathbb{Z} D = Z 上,I D ( n ) = n I_D(n)=n I D ( n ) = n 。
相应的对角线分别是全部 ( x , x ) (x,x) ( x , x ) (x ∈ B x\in B x ∈ B )、{ ( apple , apple ) , ( banana , banana ) , ( cherry , cherry ) } \{(\text{apple},\text{apple}),(\text{banana},\text{banana}),(\text{cherry},\text{cherry})\} {( apple , apple ) , ( banana , banana ) , ( cherry , cherry )} ,以及全部 ( n , n ) (n,n) ( n , n ) (n ∈ Z n\in\mathbb{Z} n ∈ Z )。
集族
序列是指标与项之间的函数关系,指标通常取遍自然数。它是集族 的特例。
定义 元素族
设 I I I 、A A A 是类,F F F 是从 I I I 到 A A A 的函数关系。常把 F F F 叫做以 I I I 为指标类的 A A A 中元素族,并写 ( F ( i ) ) i ∈ I (F(i))_{i\in I} ( F ( i ) ) i ∈ I 。特别地,若 E E E 是集合,则 P ( E ) P(E) P ( E ) 中的元素族叫做 E E E 的子集族。若记 X i = F ( i ) X_i=F(i) X i = F ( i ) ,就把这个族写成 ( X i ) i ∈ I (X_i)_{i\in I} ( X i ) i ∈ I 。
若 X X X 是 E E E 的若干子集组成的集合,对角线 D X D_X D X 本身就是一个子集族,有时记作 ( x ) x ∈ X (x)_{x\in X} ( x ) x ∈ X 。
族 ( X i ) i ∈ I (X_i)_{i\in I} ( X i ) i ∈ I 的并与交为
⋃ i ∈ I X i = { x : ( ∃ i ) ( ( i ∈ I ) ∧ ( x ∈ X i ) ) } , ⋂ i ∈ I X i = { x : ( x ∈ E ) ∧ ( ∀ i ) ( ( i ∈ I ) ⇒ ( x ∈ X i ) ) } . \bigcup_{i\in I}X_i=\{x:(\exists i)\bigl((i\in I)\land(x\in X_i)\bigr)\},
\qquad
\bigcap_{i\in I}X_i=\{x:(x\in E)\land(\forall i)\bigl((i\in I)\Rightarrow(x\in X_i)\bigr)\}. i ∈ I ⋃ X i = { x : ( ∃ i ) ( ( i ∈ I ) ∧ ( x ∈ X i ) ) } , i ∈ I ⋂ X i = { x : ( x ∈ E ) ∧ ( ∀ i ) ( ( i ∈ I ) ⇒ ( x ∈ X i ) ) } .
I I I 为空时,⋂ i ∈ I X i = E \bigcap_{i\in I}X_i=E ⋂ i ∈ I X i = E 。
例 三个子集的并与交
设 I = { 1 , 2 , 3 } I=\{1,2,3\} I = { 1 , 2 , 3 } ,
X 1 = { a , b } X_1=\{a,b\} X 1 = { a , b }
X 2 = { b , c } X_2=\{b,c\} X 2 = { b , c }
X 3 = { a , c , d } X_3=\{a,c,d\} X 3 = { a , c , d }
则
⋃ i ∈ I X i = { a , b , c , d } , ⋂ i ∈ I X i = ∅ . \bigcup_{i\in I}X_i=\{a,b,c,d\},
\qquad
\bigcap_{i\in I}X_i=\emptyset. i ∈ I ⋃ X i = { a , b , c , d } , i ∈ I ⋂ X i = ∅.
定义 作为函数的序列
集合 E E E 中的序列是从 N \mathbb{N} N 到 E E E 的函数,可写成族 ( x i ) i ∈ N (x_i)_{i\in\mathbb{N}} ( x i ) i ∈ N 。第 n n n 项记 x n x_n x n ,整个序列也常写 ( x n ) n = 1 ∞ (x_n)_{n=1}^{\infty} ( x n ) n = 1 ∞ 。
设 ( X i ) i ∈ I (X_i)_{i\in I} ( X i ) i ∈ I 是集族,X = ⋃ i ∈ I X i X=\bigcup_{i\in I}X_i X = ⋃ i ∈ I X i 。该族的乘积是
∏ i ∈ I X i = { f : ( f ∈ Map ( I , X ) ) ∧ ( ∀ i ) ( ( i ∈ I ) ⇒ ( f ( i ) ∈ X i ) ) } . \prod_{i\in I}X_i
=\{f:(f\in\operatorname{Map}(I,X))\land(\forall i)\bigl((i\in I)\Rightarrow(f(i)\in X_i)\bigr)\}. i ∈ I ∏ X i = { f : ( f ∈ Map ( I , X )) ∧ ( ∀ i ) ( ( i ∈ I ) ⇒ ( f ( i ) ∈ X i ) ) } .
若记 f ( i ) = x i f(i)=x_i f ( i ) = x i ,有时把 f f f 写成 ∏ i ∈ I x i \prod_{i\in I}x_i ∏ i ∈ I x i 。第 j j j 个投影 π j : ∏ i ∈ I X i → X j \pi_j:\prod_{i\in I}X_i\to X_j π j : ∏ i ∈ I X i → X j 由 π j ( f ) = f ( j ) \pi_j(f)=f(j) π j ( f ) = f ( j ) 给出。
例 两个二元集合的乘积
X 1 = { a , b } X_1=\{a,b\} X 1 = { a , b } ,X 2 = { 1 , 2 } X_2=\{1,2\} X 2 = { 1 , 2 } ,I = { 1 , 2 } I=\{1,2\} I = { 1 , 2 } 。则
∏ i ∈ I X i = X 1 × X 2 = { ( a , 1 ) , ( a , 2 ) , ( b , 1 ) , ( b , 2 ) } . \prod_{i\in I}X_i
=
X_1\times X_2
=
\{(a,1),(a,2),(b,1),(b,2)\}. i ∈ I ∏ X i = X 1 × X 2 = {( a , 1 ) , ( a , 2 ) , ( b , 1 ) , ( b , 2 )} . 对应 ( a , 1 ) (a,1) ( a , 1 ) 的函数满足 f ( 1 ) = a f(1)=a f ( 1 ) = a ,f ( 2 ) = 1 f(2)=1 f ( 2 ) = 1 ,投影为 π 1 ( f ) = a \pi_1(f)=a π 1 ( f ) = a ,π 2 ( f ) = 1 \pi_2(f)=1 π 2 ( f ) = 1 。
公理 笛卡尔积公理
设 ( E i ) i ∈ I (E_i)_{i\in I} ( E i ) i ∈ I 是由集合 I I I 指标的非空集族。则乘积 ∏ i ∈ I E i \prod_{i\in I}E_i ∏ i ∈ I E i 非空。
定义 选择函数
设 ( E i ) i ∈ I (E_i)_{i\in I} ( E i ) i ∈ I 是非空集族。该族的选择函数 是从 I I I 到 ⋃ i ∈ I E i \bigcup_{i\in I}E_i ⋃ i ∈ I E i 的映射 f f f ,满足每个 f ( i ) ∈ E i f(i)\in E_i f ( i ) ∈ E i 。选择函数恰是乘积中的元素。若当 i ≠ j i\neq j i = j 时 E i ∩ E j = ∅ E_i\cap E_j=\emptyset E i ∩ E j = ∅ ,称该族两两不交;此时选择函数的值域从每个成员里恰好取一个元素,叫做选取集 。
选择公理断定:每个非空集族都有选择函数;每个两两不交的非空集族都有选取集。
例 选择函数
设
E 1 = { 1 , 2 } , E 2 = { 3 , 4 } , E 3 = { 5 , 6 } , \begin{aligned}
E_1&=\{1,2\},\\
E_2&=\{3,4\},\\
E_3&=\{5,6\},
\end{aligned} E 1 E 2 E 3 = { 1 , 2 } , = { 3 , 4 } , = { 5 , 6 } , I = { 1 , 2 , 3 } I=\{1,2,3\} I = { 1 , 2 , 3 } 。一个选择函数可以是 f ( 1 ) = 1 f(1)=1 f ( 1 ) = 1 ,f ( 2 ) = 4 f(2)=4 f ( 2 ) = 4 ,f ( 3 ) = 5 f(3)=5 f ( 3 ) = 5 ,选取集是 { 1 , 4 , 5 } \{1,4,5\} { 1 , 4 , 5 } 。
自反、对称与传递
特殊关系都可以对照对角线来刻画。
定义 自反关系
集合 X X X 上的关系 R R R 称为自反 ,若 D X ⊆ R D_X\subseteq R D X ⊆ R ,即对每个 x ∈ X x\in X x ∈ X 都有 ( x , x ) ∈ R (x,x)\in R ( x , x ) ∈ R 。
例 哪些关系自反
在 { 1 , 2 , 3 , 4 } \{1,2,3,4\} { 1 , 2 , 3 , 4 } 上考虑
R 1 = { ( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 1 ) , ( 2 , 2 ) , ( 3 , 4 ) , ( 4 , 1 ) , ( 4 , 4 ) } R_1=\{(1,1),(1,2),(2,1),(2,2),(3,4),(4,1),(4,4)\} R 1 = {( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 1 ) , ( 2 , 2 ) , ( 3 , 4 ) , ( 4 , 1 ) , ( 4 , 4 )}
R 2 = { ( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 1 ) } R_2=\{(1,1),(1,2),(2,1)\} R 2 = {( 1 , 1 ) , ( 1 , 2 ) , ( 2 , 1 )}
R 3 = { ( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 4 ) , ( 2 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) , ( 4 , 1 ) , ( 4 , 4 ) } R_3=\{(1,1),(1,2),(1,4),(2,1),(2,2),(3,3),(4,1),(4,4)\} R 3 = {( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 4 ) , ( 2 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) , ( 4 , 1 ) , ( 4 , 4 )}
R 4 = { ( 2 , 1 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 4 , 1 ) , ( 4 , 2 ) , ( 4 , 3 ) } R_4=\{(2,1),(3,1),(3,2),(4,1),(4,2),(4,3)\} R 4 = {( 2 , 1 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 4 , 1 ) , ( 4 , 2 ) , ( 4 , 3 )}
R 5 = { ( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 2 ) , ( 2 , 3 ) , ( 2 , 4 ) , ( 3 , 3 ) , ( 3 , 4 ) , ( 4 , 4 ) } R_5=\{(1,1),(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,3),(3,4),(4,4)\} R 5 = {( 1 , 1 ) , ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 2 ) , ( 2 , 3 ) , ( 2 , 4 ) , ( 3 , 3 ) , ( 3 , 4 ) , ( 4 , 4 )}
R 6 = { ( 3 , 4 ) } R_6=\{(3,4)\} R 6 = {( 3 , 4 )}
R 3 R_3 R 3 与 R 5 R_5 R 5 含有全部 ( a , a ) (a,a) ( a , a ) ,因此自反。其余都不含 ( 3 , 3 ) (3,3) ( 3 , 3 ) ,不自反。
定义 反自反关系
X X X 上的关系 R R R 称为反自反 ,若 D X ∩ R = ∅ D_X\cap R=\emptyset D X ∩ R = ∅ ,即没有任何 ( x , x ) (x,x) ( x , x ) 属于 R R R 。
定义 对称关系
X X X 上的关系 R R R 称为对称 ,若 ( x , y ) ∈ R (x,y)\in R ( x , y ) ∈ R 蕴含 ( y , x ) ∈ R (y,x)\in R ( y , x ) ∈ R ,即 R = R − 1 R=R^{-1} R = R − 1 。
定义 不对称关系
X X X 上的关系 R R R 称为不对称 ,若 ( x , y ) ∈ R (x,y)\in R ( x , y ) ∈ R 蕴含 ( y , x ) ∉ R (y,x)\notin R ( y , x ) ∈ / R 。特别地 R ∩ R − 1 = ∅ R\cap R^{-1}=\emptyset R ∩ R − 1 = ∅ 。
定义 反对称关系
X X X 上的关系 R R R 称为反对称 ,若 ( x , y ) ∈ R (x,y)\in R ( x , y ) ∈ R 且 ( y , x ) ∈ R (y,x)\in R ( y , x ) ∈ R 蕴含 x = y x=y x = y ,即 R ∩ R − 1 ⊆ D X R\cap R^{-1}\subseteq D_X R ∩ R − 1 ⊆ D X 。
这三组词容易混:
对称:有来有回。
不对称:有来就不能有回,自环也不许。
反对称:双向同时出现时,两端必须是同一个元素。自环允许。
例 兄弟姐妹
“是兄弟姐妹”对称:Tom 是 Jerry 的兄弟姐妹,Jerry 也是 Tom 的兄弟姐妹。
例 小于
实数上的 < < < 不对称:3 < 4 3<4 3 < 4 时不可能有 4 < 3 4<3 4 < 3 。
例 整除
整数上的整除反对称:6 6 6 整除 12 12 12 ,但 12 12 12 不整除 6 6 6 ;同时 6 6 6 整除 6 6 6 并不破坏反对称。
习题
练习 集合还是类
在 NBG 中判断下列汇集是集合还是类,并说明理由。
所有不以自身为元素的集合组成的汇集。
全体自然数。
全体序数组成的类。
解 集合还是类
这是真类 。把它当成集合就会回到 Russell 悖论。
全体自然数是集合 。它本身是“所有集合”这个类的元素。
全体序数是真类 ,过大,不能是集合。
练习 真类如何避开 Russell 悖论
NBG 用更严格的公理修补朴素集合论。真类不能再作为别的类或集合的元素。说明这如何挡住 Russell 悖论。
解 真类如何避开 Russell 悖论
有了类,就可以谈论“所有集合组成的类”这类过大的汇集。Russell 悖论里的 R R R 不再被承认为集合,而只是真类。公理系统不允许再对它做只对集合合法的那些运算,于是悖论进不来。
练习 循环包含推出相等
设 A A A 、B B B 、C C C 是类,且 A ⊆ B A\subseteq B A ⊆ B 、B ⊆ C B\subseteq C B ⊆ C 、C ⊆ A C\subseteq A C ⊆ A 。证明 A = B = C A=B=C A = B = C 。
解 循环包含推出相等
由 A ⊆ B A\subseteq B A ⊆ B 且 B ⊆ C B\subseteq C B ⊆ C 得 A ⊆ C A\subseteq C A ⊆ C 。再与 C ⊆ A C\subseteq A C ⊆ A 合用外延公理,得 A = C A=C A = C 。同理 A = B A=B A = B 。
练习 真包含传递
设 A A A 、B B B 、C C C 是类,且 A ⊂ B A\subset B A ⊂ B 、B ⊂ C B\subset C B ⊂ C 。证明 A ⊂ C A\subset C A ⊂ C 。
解 真包含传递
A ⊆ B ⊆ C A\subseteq B\subseteq C A ⊆ B ⊆ C 给出 A ⊆ C A\subseteq C A ⊆ C 。又存在 b ∈ B ∖ A b\in B\setminus A b ∈ B ∖ A ,且 b ∈ C b\in C b ∈ C ,所以 A ≠ C A\neq C A = C ,从而 A ⊂ C A\subset C A ⊂ C 。
关系的表示
符号写关系精确,图和矩阵则更直观。
用矩阵表示
有限集之间的关系可以用 0 0 0 -1 1 1 矩阵写出。设 R R R 从 A = { a 1 , … , a m } A=\{a_1,\ldots,a_m\} A = { a 1 , … , a m } 到 B = { b 1 , … , b n } B=\{b_1,\ldots,b_n\} B = { b 1 , … , b n } (元素事先排好序;A = B A=B A = B 时两边用同一排序)。矩阵 M R = [ m i j ] M_R=[m_{ij}] M R = [ m ij ] 满足
m i j = { 1 , ( a i , b j ) ∈ R , 0 , ( a i , b j ) ∉ R . m_{ij}
=
\begin{cases}
1,&(a_i,b_j)\in R,\\
0,&(a_i,b_j)\notin R.
\end{cases} m ij = { 1 , 0 , ( a i , b j ) ∈ R , ( a i , b j ) ∈ / R .
例 三元关系的矩阵
X = { 1 , 2 , 3 } X=\{1,2,3\} X = { 1 , 2 , 3 } 上 R = { ( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 1 ) } R=\{(1,2),(2,3),(3,1)\} R = {( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 1 )} 的矩阵是
M = [ 0 1 0 0 0 1 1 0 0 ] . M
=
\begin{bmatrix}
0 & 1 & 0 \\
0 & 0 & 1 \\
1 & 0 & 0
\end{bmatrix}. M = 0 0 1 1 0 0 0 1 0 .
自反关系的矩阵
关系自反当且仅当对角线全是 1 1 1 。非对角元可以任意,所以自反关系不必是恒等关系。
例 自反矩阵
X = { 1 , 2 , 3 } X=\{1,2,3\} X = { 1 , 2 , 3 } 上自反关系至少含 ( 1 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) (1,1),(2,2),(3,3) ( 1 , 1 ) , ( 2 , 2 ) , ( 3 , 3 ) ,矩阵形如
M = [ 1 a b c 1 d e f 1 ] , M
=
\begin{bmatrix}
1 & a & b \\
c & 1 & d \\
e & f & 1
\end{bmatrix}, M = 1 c e a 1 f b d 1 , 其中 a , … , f a,\ldots,f a , … , f 各为 0 0 0 或 1 1 1 。对角线必须全 1 1 1 ,但整张矩阵不必是单位阵。
对称、反对称与不对称的矩阵
对称意味着 ( a , b ) ∈ R (a,b)\in R ( a , b ) ∈ R 当且仅当 ( b , a ) ∈ R (b,a)\in R ( b , a ) ∈ R ,即 M = M T M=M^T M = M T 。对称并不要求对角线为 1 1 1 ,那是自反的事。
例 对称矩阵
X = { 1 , 2 , 3 } X=\{1,2,3\} X = { 1 , 2 , 3 } 上 R = { ( 1 , 1 ) , ( 3 , 3 ) , ( 1 , 2 ) , ( 2 , 1 ) } R=\{(1,1),(3,3),(1,2),(2,1)\} R = {( 1 , 1 ) , ( 3 , 3 ) , ( 1 , 2 ) , ( 2 , 1 )} 的矩阵是
M = [ 1 1 0 1 0 0 0 0 1 ] . M
=
\begin{bmatrix}
1 & 1 & 0 \\
1 & 0 & 0 \\
0 & 0 & 1
\end{bmatrix}. M = 1 1 0 1 0 0 0 0 1 . 关于主对角线对称。它不含 ( 2 , 2 ) (2,2) ( 2 , 2 ) ,所以不自反。自反管的是“自己连自己”,对称管的是“有来就有回”,两者独立。
反对称:若 a ≠ b a\neq b a = b ,不能同时有 ( a , b ) (a,b) ( a , b ) 和 ( b , a ) (b,a) ( b , a ) 。对角线上的自环不影响反对称。
例 反对称矩阵
X = { 1 , 2 , 3 } X=\{1,2,3\} X = { 1 , 2 , 3 } 上 R = { ( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 3 ) } R=\{(1,2),(2,3),(3,3)\} R = {( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 3 )} 的矩阵是
M = [ 0 1 0 0 0 1 0 0 1 ] . M
=
\begin{bmatrix}
0 & 1 & 0 \\
0 & 0 & 1 \\
0 & 0 & 1
\end{bmatrix}. M = 0 0 0 1 0 0 0 1 1 . m 12 = 1 m_{12}=1 m 12 = 1 而 m 21 = 0 m_{21}=0 m 21 = 0 ,m 23 = 1 m_{23}=1 m 23 = 1 而 m 32 = 0 m_{32}=0 m 32 = 0 ;m 33 = 1 m_{33}=1 m 33 = 1 不破坏反对称。
不对称更强:只要 ( a , b ) ∈ R (a,b)\in R ( a , b ) ∈ R ,就禁止 ( b , a ) ∈ R (b,a)\in R ( b , a ) ∈ R ,自环通常也不出现。
例 不对称矩阵
R = { ( 1 , 2 ) , ( 2 , 3 ) } R=\{(1,2),(2,3)\} R = {( 1 , 2 ) , ( 2 , 3 )} 的矩阵是
M = [ 0 1 0 0 0 1 0 0 0 ] . M
=
\begin{bmatrix}
0 & 1 & 0 \\
0 & 0 & 1 \\
0 & 0 & 0
\end{bmatrix}. M = 0 0 0 1 0 0 0 1 0 . 没有互为反向的边,对角线也全是 0 0 0 。
关系矩阵的运算
并、交可以对位比较。
例 并与交
设
A = [ 0 1 0 0 0 1 0 0 0 ] , B = [ 1 1 0 0 0 0 1 0 0 ] . A=\begin{bmatrix}0&1&0\\0&0&1\\0&0&0\end{bmatrix},
\qquad
B=\begin{bmatrix}1&1&0\\0&0&0\\1&0&0\end{bmatrix}. A = 0 0 0 1 0 0 0 1 0 , B = 1 0 1 1 0 0 0 0 0 . 则
A ∪ B = [ 1 1 0 0 0 1 1 0 0 ] , A ∩ B = [ 0 1 0 0 0 0 0 0 0 ] . A\cup B=\begin{bmatrix}1&1&0\\0&0&1\\1&0&0\end{bmatrix},
\qquad
A\cap B=\begin{bmatrix}0&1&0\\0&0&0\\0&0&0\end{bmatrix}. A ∪ B = 1 0 1 1 0 0 0 1 0 , A ∩ B = 0 0 0 1 0 0 0 0 0 .
复合对应布尔积。设 R R R 从 A A A 到 B B B ,S S S 从 B B B 到 C C C ,三边分别有 m m m 、n n n 、p p p 个元素。( a i , c j ) ∈ S ∘ R (a_i,c_j)\in S\circ R ( a i , c j ) ∈ S ∘ R 当且仅当存在 b k b_k b k 使 ( a i , b k ) ∈ R (a_i,b_k)\in R ( a i , b k ) ∈ R 且 ( b k , c j ) ∈ S (b_k,c_j)\in S ( b k , c j ) ∈ S 。因此
M S ∘ R = M R ⊗ M S , M_{S\circ R}=M_R\otimes M_S, M S ∘ R = M R ⊗ M S ,
其中 ⊗ \otimes ⊗ 把加法换成逻辑或,把乘法换成逻辑与。
例 布尔积
M R = [ 1 0 1 1 1 0 0 0 0 ] , M S = [ 0 1 0 0 0 1 1 0 1 ] . M_R
=
\begin{bmatrix}
1 & 0 & 1 \\
1 & 1 & 0 \\
0 & 0 & 0
\end{bmatrix},
\qquad
M_S
=
\begin{bmatrix}
0 & 1 & 0 \\
0 & 0 & 1 \\
1 & 0 & 1
\end{bmatrix}. M R = 1 1 0 0 1 0 1 0 0 , M S = 0 0 1 1 0 0 0 1 1 .
解 布尔积
M S ∘ R = M R ⊗ M S = [ 1 1 1 0 1 1 0 0 0 ] . M_{S\circ R}
=
M_R\otimes M_S
=
\begin{bmatrix}
1 & 1 & 1 \\
0 & 1 & 1 \\
0 & 0 & 0
\end{bmatrix}. M S ∘ R = M R ⊗ M S = 1 0 0 1 1 0 1 1 0 .
例 关系的平方
M R = [ 0 1 0 0 1 1 1 0 0 ] . M_R
=
\begin{bmatrix}
0 & 1 & 0 \\
0 & 1 & 1 \\
1 & 0 & 0
\end{bmatrix}. M R = 0 0 1 1 1 0 0 1 0 .
解 关系的平方
M R [ 2 ] = M R ⊗ M R = [ 0 1 1 1 1 1 0 1 0 ] . M_{R^{[2]}}
=
M_R\otimes M_R
=
\begin{bmatrix}
0 & 1 & 1 \\
1 & 1 & 1 \\
0 & 1 & 0
\end{bmatrix}. M R [ 2 ] = M R ⊗ M R = 0 1 0 1 1 1 1 1 0 . 其中 1 1 1 表示对应顶点之间存在长度为 2 2 2 的有向路。
用有向图表示
定义 有向图
有向图是有序对 G = ( V , A ) G=(V,A) G = ( V , A ) ,其中 V V V 是非空顶点集,A A A 是有序顶点对组成的弧集。弧 ( x , y ) (x,y) ( x , y ) 从 x x x 指向 y y y 。
把定义域、陪域里的元素当顶点,把关系里的有序对当弧,就得到关系的有向图。
例 从 A 到 B 的有向图
A = { a , b , c } A=\{a,b,c\} A = { a , b , c } ,B = { a , d } B=\{a,d\} B = { a , d } ,
R = { ( a , a ) , ( a , d ) , ( b , a ) , ( c , a ) , ( c , d ) } . R=\{(a,a),(a,d),(b,a),(c,a),(c,d)\}. R = {( a , a ) , ( a , d ) , ( b , a ) , ( c , a ) , ( c , d )} .
自反、对称等性质在图上往往一眼能看出来。
例 自反的有向图
A = { a , b , c } A=\{a,b,c\} A = { a , b , c } 上 R = { ( a , a ) , ( b , b ) , ( c , c ) , ( b , a ) } R=\{(a,a),(b,b),(c,c),(b,a)\} R = {( a , a ) , ( b , b ) , ( c , c ) , ( b , a )} 自反:每个顶点都有自环。
例 对称与反对称
仍在 A = { a , b , c } A=\{a,b,c\} A = { a , b , c } 上,取 R 1 = { ( a , b ) , ( b , a ) , ( a , c ) , ( c , a ) } R_1=\{(a,b),(b,a),(a,c),(c,a)\} R 1 = {( a , b ) , ( b , a ) , ( a , c ) , ( c , a )} ,R 2 = { ( a , a ) , ( b , b ) , ( c , c ) , ( a , b ) , ( b , c ) } R_2=\{(a,a),(b,b),(c,c),(a,b),(b,c)\} R 2 = {( a , a ) , ( b , b ) , ( c , c ) , ( a , b ) , ( b , c )} 。
R 1 R_1 R 1 对称:不同顶点之间的边都成对出现。R 2 R_2 R 2 反对称:只有自环是双向的,其余边都是单向。
例 传递
R 1 = { ( a , b ) , ( b , c ) , ( a , c ) } R_1=\{(a,b),(b,c),(a,c)\} R 1 = {( a , b ) , ( b , c ) , ( a , c )} ,R 2 = { ( a , a ) , ( a , b ) , ( b , b ) } R_2=\{(a,a),(a,b),(b,b)\} R 2 = {( a , a ) , ( a , b ) , ( b , b )} 都传递。R 2 R_2 R 2 的传递性特别用到了 a a a 、b b b 上的自环。既自反、对称又传递的关系就是下一节的等价关系。
习题
练习 由矩阵列出有序对
下列矩阵给出 { 1 , 2 , 3 , 4 } \{1,2,3,4\} { 1 , 2 , 3 , 4 } 上的关系(行列都按递增顺序)。列出各自的有序对。
a) [ 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 ] b) [ 1 1 1 0 0 1 0 0 0 0 1 1 1 0 0 1 ] c) [ 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 ] \text{a)}
\begin{bmatrix}
1 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 \\
0 & 1 & 1 & 1 \\
1 & 0 & 1 & 1
\end{bmatrix}
\quad
\text{b)}
\begin{bmatrix}
1 & 1 & 1 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 1 \\
1 & 0 & 0 & 1
\end{bmatrix}
\quad
\text{c)}
\begin{bmatrix}
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0 \\
0 & 1 & 0 & 1 \\
1 & 0 & 1 & 0
\end{bmatrix} a) 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 b) 1 0 0 1 1 1 0 0 1 0 1 0 0 0 1 1 c) 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0
解 由矩阵列出有序对
( 1 , 1 ) (1,1) ( 1 , 1 ) 、( 1 , 2 ) (1,2) ( 1 , 2 ) 、( 1 , 4 ) (1,4) ( 1 , 4 ) 、( 2 , 1 ) (2,1) ( 2 , 1 ) 、( 2 , 3 ) (2,3) ( 2 , 3 ) 、( 3 , 2 ) (3,2) ( 3 , 2 ) 、( 3 , 3 ) (3,3) ( 3 , 3 ) 、( 3 , 4 ) (3,4) ( 3 , 4 ) 、( 4 , 1 ) (4,1) ( 4 , 1 ) 、( 4 , 3 ) (4,3) ( 4 , 3 ) 、( 4 , 4 ) (4,4) ( 4 , 4 ) 。
( 1 , 1 ) (1,1) ( 1 , 1 ) 、( 1 , 2 ) (1,2) ( 1 , 2 ) 、( 1 , 3 ) (1,3) ( 1 , 3 ) 、( 2 , 2 ) (2,2) ( 2 , 2 ) 、( 3 , 3 ) (3,3) ( 3 , 3 ) 、( 3 , 4 ) (3,4) ( 3 , 4 ) 、( 4 , 1 ) (4,1) ( 4 , 1 ) 、( 4 , 4 ) (4,4) ( 4 , 4 ) 。
( 1 , 2 ) (1,2) ( 1 , 2 ) 、( 1 , 4 ) (1,4) ( 1 , 4 ) 、( 2 , 1 ) (2,1) ( 2 , 1 ) 、( 2 , 3 ) (2,3) ( 2 , 3 ) 、( 3 , 2 ) (3,2) ( 3 , 2 ) 、( 3 , 4 ) (3,4) ( 3 , 4 ) 、( 4 , 1 ) (4,1) ( 4 , 1 ) 、( 4 , 3 ) (4,3) ( 4 , 3 ) 。
练习 由有序对写出矩阵
把 { 1 , 2 , 3 , 4 } \{1,2,3,4\} { 1 , 2 , 3 , 4 } 上的下列关系写成矩阵(元素按递增顺序)。
{ ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 3 ) , ( 2 , 4 ) , ( 3 , 4 ) } \{(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)\} {( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 3 ) , ( 2 , 4 ) , ( 3 , 4 )}
{ ( 1 , 1 ) , ( 1 , 4 ) , ( 2 , 2 ) , ( 3 , 3 ) , ( 4 , 1 ) } \{(1,1),(1,4),(2,2),(3,3),(4,1)\} {( 1 , 1 ) , ( 1 , 4 ) , ( 2 , 2 ) , ( 3 , 3 ) , ( 4 , 1 )}
{ ( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 1 ) , ( 2 , 3 ) , ( 2 , 4 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 3 , 4 ) , ( 4 , 1 ) , ( 4 , 2 ) , ( 4 , 3 ) } \{(1,2),(1,3),(1,4),(2,1),(2,3),(2,4),(3,1),(3,2),(3,4),(4,1),(4,2),(4,3)\} {( 1 , 2 ) , ( 1 , 3 ) , ( 1 , 4 ) , ( 2 , 1 ) , ( 2 , 3 ) , ( 2 , 4 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 3 , 4 ) , ( 4 , 1 ) , ( 4 , 2 ) , ( 4 , 3 )}
{ ( 2 , 4 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 3 , 4 ) } \{(2,4),(3,1),(3,2),(3,4)\} {( 2 , 4 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 3 , 4 )}
解 由有序对写出矩阵
[ 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 ] [ 1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 ] [ 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 ] [ 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 ] \begin{bmatrix}
0 & 1 & 1 & 1 \\
0 & 0 & 1 & 1 \\
0 & 0 & 0 & 1 \\
0 & 0 & 0 & 0
\end{bmatrix}
\quad
\begin{bmatrix}
1 & 0 & 0 & 1 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 0 \\
1 & 0 & 0 & 0
\end{bmatrix}
\quad
\begin{bmatrix}
0 & 1 & 1 & 1 \\
1 & 0 & 1 & 1 \\
1 & 1 & 0 & 1 \\
1 & 1 & 1 & 0
\end{bmatrix}
\quad
\begin{bmatrix}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 \\
1 & 1 & 0 & 1 \\
0 & 0 & 0 & 0
\end{bmatrix} 0 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 0 0 0 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0
练习 一千阶矩阵里有多少个 1
A = { 1 , 2 , … , 1000 } A=\{1,2,\ldots,1000\} A = { 1 , 2 , … , 1000 } 上的关系 R R R 用矩阵表示,下列情形各有多少个非零元?
{ ( a , b ) : a ≤ b } \{(a,b):a\le b\} {( a , b ) : a ≤ b }
{ ( a , b ) : a = b ± 1 } \{(a,b):a=b\pm 1\} {( a , b ) : a = b ± 1 }
{ ( a , b ) : a + b = 1000 } \{(a,b):a+b=1000\} {( a , b ) : a + b = 1000 }
{ ( a , b ) : a + b ≤ 1001 } \{(a,b):a+b\le 1001\} {( a , b ) : a + b ≤ 1001 }
{ ( a , b ) : a ≠ 0 } \{(a,b):a\neq 0\} {( a , b ) : a = 0 }
解 一千阶矩阵里有多少个 1
矩阵一共 1000 2 = 1,000,000 1000^2=1{,}000{,}000 100 0 2 = 1 , 000 , 000 个位置。
上三角(含对角)的个数是 ( 1000 2 ) + 1000 = 500,500 \binom{1000}{2}+1000=500{,}500 ( 2 1000 ) + 1000 = 500 , 500 。
除首末两行各一个 1 1 1 外,其余每行两个 1 1 1 ,共 998 ⋅ 2 + 2 = 1998 998\cdot 2+2=1998 998 ⋅ 2 + 2 = 1998 。
位置 ( 1 , 999 ) , … , ( 999 , 1 ) (1,999),\ldots,(999,1) ( 1 , 999 ) , … , ( 999 , 1 ) ,共 999 999 999 个。
反对角线及其左上方,个数与 (1) 相同,仍是 500,500 500{,}500 500 , 500 。
1 ≤ a ≤ 1000 1\le a\le 1000 1 ≤ a ≤ 1000 时条件恒真,全部 1,000,000 1{,}000{,}000 1 , 000 , 000 个位置都是 1 1 1 。
练习 画出有向图
画出关系
{ ( a , a ) , ( a , b ) , ( b , c ) , ( c , b ) , ( c , d ) , ( d , a ) , ( d , b ) } \{(a,a),(a,b),(b,c),(c,b),(c,d),(d,a),(d,b)\} {( a , a ) , ( a , b ) , ( b , c ) , ( c , b ) , ( c , d ) , ( d , a ) , ( d , b )} 的有向图。
练习 补关系的有向图
设 R R R 是集合 A A A 上的关系。如何从 R R R 的有向图得到补关系 R ‾ \overline{R} R 的有向图?
解 补关系的有向图
对每一对顶点 ( a , b ) (a,b) ( a , b ) (包括 a = b a=b a = b ):原来有弧就删掉,原来没有就补上。
练习 并、交、对称差、差与复合
已知两个关系的有向图,如何得到它们的并、交、对称差、差以及复合的有向图?
解 并、交、对称差、差与复合
假定两个关系定义在同一集合上。并:两边只要有一边有弧就保留。交:两边都有才保留。对称差:恰好一边有才保留。差:只保留第一边有、第二边没有的弧。复合 S ∘ R S\circ R S ∘ R :若存在顶点 k k k 使 R R R 中有 i → k i\to k i → k 且 S S S 中有 k → j k\to j k → j ,就连 i → j i\to j i → j 。
关系的闭包
本节关于关系的闭包(自反闭包、对称闭包与传递闭包/Warshall 算法)为源讲义保留的大纲占位,完整的概念定义与算法推导已列入后续撰写队列。
等价关系
等价关系把集合拆成互不相交的块,块里的元素在某种意义上“一样”。三个性质缺一不可:自反、对称、传递。
常见例子:数的相等、模 n n n 同余、三角形相似、集合等势。
等价
定义 等价关系
集合 A A A 上同时自反、对称、传递的关系叫做等价关系 。若 a a a 、b b b 被某个等价关系连着,就称它们等价,常记 a ∼ b a\sim b a ∼ b 。
例 模 m 同余
设 m > 1 m>1 m > 1 为整数。证明
R = { ( a , b ) : a ≡ b ( m o d m ) } R=\{(a,b):a\equiv b\pmod{m}\} R = {( a , b ) : a ≡ b ( mod m )} 是 Z \mathbb{Z} Z 上的等价关系。
解 模 m 同余
a ≡ b ( m o d m ) a\equiv b\pmod{m} a ≡ b ( mod m ) 当且仅当 m m m 整除 a − b a-b a − b 。a − a = 0 = 0 ⋅ m a-a=0=0\cdot m a − a = 0 = 0 ⋅ m ,所以自反。
若 a − b = k m a-b=km a − b = k m ,则 b − a = ( − k ) m b-a=(-k)m b − a = ( − k ) m ,所以对称。
若 a − b = k m a-b=km a − b = k m 且 b − c = ℓ m b-c=\ell m b − c = ℓ m ,则 a − c = ( k + ℓ ) m a-c=(k+\ell)m a − c = ( k + ℓ ) m ,所以传递。
例 等基数的子集
A A A 非空。在幂集 P ( A ) P(A) P ( A ) 上规定 X ∼ Y X\sim Y X ∼ Y 当且仅当 ∣ X ∣ = ∣ Y ∣ |X|=|Y| ∣ X ∣ = ∣ Y ∣ 。
解 等基数的子集
基数相等显然自反、对称、传递。等价类按元素个数分块。例如 A = { 1 , 2 , 3 } A=\{1,2,3\} A = { 1 , 2 , 3 } 时:
[ ∅ ] = { ∅ } [\emptyset]=\{\emptyset\} [ ∅ ] = { ∅ }
[ { 1 } ] = { { 1 } , { 2 } , { 3 } } [\{1\}]=\{\{1\},\{2\},\{3\}\} [{ 1 }] = {{ 1 } , { 2 } , { 3 }}
[ { 1 , 2 } ] = { { 1 , 2 } , { 1 , 3 } , { 2 , 3 } } [\{1,2\}]=\{\{1,2\},\{1,3\},\{2,3\}\} [{ 1 , 2 }] = {{ 1 , 2 } , { 1 , 3 } , { 2 , 3 }}
[ A ] = { A } [A]=\{A\} [ A ] = { A }
例 相差不到 1 不是等价
在 R \mathbb{R} R 上规定 x R y xRy x R y 当且仅当 ∣ x − y ∣ < 1 |x-y|<1 ∣ x − y ∣ < 1 。证明 R R R 不是等价关系。
解 相差不到 1 不是等价
∣ x − x ∣ = 0 < 1 |x-x|=0<1 ∣ x − x ∣ = 0 < 1 ,自反。∣ x − y ∣ = ∣ y − x ∣ |x-y|=|y-x| ∣ x − y ∣ = ∣ y − x ∣ ,对称。但不传递:取 x = 2.8 x=2.8 x = 2.8 ,y = 1.9 y=1.9 y = 1.9 ,z = 1.1 z=1.1 z = 1.1 ,则 ∣ x − y ∣ = 0.9 < 1 |x-y|=0.9<1 ∣ x − y ∣ = 0.9 < 1 ,∣ y − z ∣ = 0.8 < 1 |y-z|=0.8<1 ∣ y − z ∣ = 0.8 < 1 ,而 ∣ x − z ∣ = 1.7 > 1 |x-z|=1.7>1 ∣ x − z ∣ = 1.7 > 1 。
等价类
定义 等价类
设 R R R 是 A A A 上的等价关系。与 a ∈ A a\in A a ∈ A 相关的全部元素组成 a a a 的等价类 ,记 [ a ] R [a]_R [ a ] R ,在不致混淆时简写 [ a ] [a] [ a ] 。
例 绝对值相等
关系 a = ∣ b ∣ a=|b| a = ∣ b ∣ 给出的等价类是什么?(更干净的说法是 a ∼ b a\sim b a ∼ b 当且仅当 ∣ a ∣ = ∣ b ∣ |a|=|b| ∣ a ∣ = ∣ b ∣ 。)
解 绝对值相等
∣ a ∣ = ∣ b ∣ |a|=|b| ∣ a ∣ = ∣ b ∣ 当且仅当 b = ± a b=\pm a b = ± a ,所以 [ a ] = { − a , a } [a]=\{-a,a\} [ a ] = { − a , a } ,对 0 0 0 也成立:[ 0 ] = { 0 } [0]=\{0\} [ 0 ] = { 0 } 。例如 [ 3 ] = { − 3 , 3 } [3]=\{-3,3\} [ 3 ] = { − 3 , 3 } 。
例 模 4 的 0 与 1
模 4 4 4 同余之下,0 0 0 与 1 1 1 的等价类是什么?
解 模 4 的 0 与 1
[ 0 ] = { … , − 8 , − 4 , 0 , 4 , 8 , … } , [ 1 ] = { … , − 7 , − 3 , 1 , 5 , 9 , … } . [0]=\{\ldots,-8,-4,0,4,8,\ldots\},
\qquad
[1]=\{\ldots,-7,-3,1,5,9,\ldots\}. [ 0 ] = { … , − 8 , − 4 , 0 , 4 , 8 , … } , [ 1 ] = { … , − 7 , − 3 , 1 , 5 , 9 , … } .
定义 模 m 剩余类
正整数 m m m 给定后,整数 a a a 的模 m m m 剩余类是
[ a ] m = { b ∈ Z : b ≡ a ( m o d m ) } = { a + k m : k ∈ Z } . [a]_m=\{b\in\mathbb{Z}:b\equiv a\pmod{m}\}=\{a+km:k\in\mathbb{Z}\}. [ a ] m = { b ∈ Z : b ≡ a ( mod m )} = { a + k m : k ∈ Z } .
例 分数化简
在“化简后相同”这个关系下,1 2 \frac12 2 1 的等价类是什么?
解 分数化简
所有分子是分母一半的分数,例如
[ 1 2 ] = { 2 4 , 3 6 , 4 8 , 5 10 , … } . \Bigl[\tfrac12\Bigr]
=
\Bigl\{\tfrac24,\tfrac36,\tfrac48,\tfrac{5}{10},\ldots\Bigr\}. [ 2 1 ] = { 4 2 , 6 3 , 8 4 , 10 5 , … } .
例 等长字符串
在“长度相同”这个关系下,字符串 c a t \mathrm{cat} cat 的等价类是什么?
解 等长字符串
所有长度为 3 3 3 的字符串,例如 { d o g , p e n , s u n , m o m , … } \{\mathrm{dog},\mathrm{pen},\mathrm{sun},\mathrm{mom},\ldots\} { dog , pen , sun , mom , … } 。
划分把集合拆成非空、互不相交、并起来等于全集的块。等价类正好给出这样一种划分。
定理 等价类的三条刻画
设 R R R 是 A A A 上的等价关系。对 a , b ∈ A a,b\in A a , b ∈ A ,下列三条等价:
( i ) a R b ( i i ) [ a ] = [ b ] ( i i i ) [ a ] ∩ [ b ] ≠ ∅ . (i)\ aRb
\qquad
(ii)\ [a]=[b]
\qquad
(iii)\ [a]\cap[b]\neq\emptyset. ( i ) a R b ( ii ) [ a ] = [ b ] ( iii ) [ a ] ∩ [ b ] = ∅.
证明
先证 ( i ) ⇒ ( i i ) (i)\Rightarrow(ii) ( i ) ⇒ ( ii ) 。设 a R b aRb a R b 。若 c ∈ [ a ] c\in[a] c ∈ [ a ] ,则 a R c aRc a R c 。由对称得 b R a bRa b R a ,再由传递得 b R c bRc b R c ,故 c ∈ [ b ] c\in[b] c ∈ [ b ] 。于是 [ a ] ⊆ [ b ] [a]\subseteq[b] [ a ] ⊆ [ b ] 。对称地 [ b ] ⊆ [ a ] [b]\subseteq[a] [ b ] ⊆ [ a ] 。
再证 ( i i ) ⇒ ( i i i ) (ii)\Rightarrow(iii) ( ii ) ⇒ ( iii ) 。[ a ] = [ b ] [a]=[b] [ a ] = [ b ] 且由自反 a ∈ [ a ] a\in[a] a ∈ [ a ] ,交非空。
最后 ( i i i ) ⇒ ( i ) (iii)\Rightarrow(i) ( iii ) ⇒ ( i ) 。若 c c c 同属两块,则 a R c aRc a R c 且 b R c bRc b R c 。对称给出 c R b cRb c R b ,传递给出 a R b aRb a R b 。
因为每个 a a a 都在自己的类里,所以 ⋃ a ∈ A [ a ] R = A \bigcup_{a\in A}[a]_R=A ⋃ a ∈ A [ a ] R = A 。不同的类不相交。
引理 不同等价类不相交
若 [ a ] R ≠ [ b ] R [a]_R\neq[b]_R [ a ] R = [ b ] R ,则 [ a ] R ∩ [ b ] R = ∅ [a]_R\cap[b]_R=\emptyset [ a ] R ∩ [ b ] R = ∅ 。
这正是上一定理 ( i i ) (ii) ( ii ) 与 ( i i i ) (iii) ( iii ) 的逆否。
定义 划分
集合 S S S 的划分是一族非空子集 ( A i ) i ∈ I (A_i)_{i\in I} ( A i ) i ∈ I ,满足 i ≠ j i\neq j i = j 时 A i ∩ A j = ∅ A_i\cap A_j=\emptyset A i ∩ A j = ∅ ,并且
⋃ i ∈ I A i = S . \bigcup_{i\in I}A_i=S. i ∈ I ⋃ A i = S .
例 模 3 的三条陈述
A = Z A=\mathbb{Z} A = Z ,R R R 为模 3 3 3 同余。判断:
1 R 4 1R4 1 R 4
[ 1 ] = [ 4 ] [1]=[4] [ 1 ] = [ 4 ]
[ 1 ] ∩ [ 4 ] ≠ ∅ [1]\cap[4]\neq\emptyset [ 1 ] ∩ [ 4 ] = ∅
解 模 3 的三条陈述
三条都真:4 ≡ 1 ( m o d 3 ) 4\equiv 1\pmod{3} 4 ≡ 1 ( mod 3 ) ,因此同类,交当然非空。这正好对照三条刻画。
模三同余把所有整数划分为三个互不相交的等价类。
习题
练习 模 5 的 2
写出模 5 5 5 同余之下 2 2 2 的等价类。
解 模 5 的 2
[ 2 ] 5 = { … , − 8 , − 3 , 2 , 7 , 12 , … } = { 2 + 5 k : k ∈ Z } . [2]_5=\{\ldots,-8,-3,2,7,12,\ldots\}=\{2+5k:k\in\mathbb{Z}\}. [ 2 ] 5 = { … , − 8 , − 3 , 2 , 7 , 12 , … } = { 2 + 5 k : k ∈ Z } .
练习 并上 \{2\} 后的基数
在 P ( { 1 , 2 , 3 , 4 } ) P(\{1,2,3,4\}) P ({ 1 , 2 , 3 , 4 }) 上规定 X ∼ Y X\sim Y X ∼ Y 当且仅当 ∣ X ∪ { 2 } ∣ = ∣ Y ∪ { 2 } ∣ |X\cup\{2\}|=|Y\cup\{2\}| ∣ X ∪ { 2 } ∣ = ∣ Y ∪ { 2 } ∣ 。写出全部等价类。
解 并上 \{2\} 后的基数
P ( { 1 , 2 , 3 , 4 } ) P(\{1,2,3,4\}) P ({ 1 , 2 , 3 , 4 }) 有 16 16 16 个子集。按 ∣ X ∪ { 2 } ∣ |X\cup\{2\}| ∣ X ∪ { 2 } ∣ 分组:
{ ∅ , { 2 } } , { { 1 } , { 3 } , { 4 } , { 1 , 2 } , { 2 , 3 } , { 2 , 4 } } , { { 1 , 3 } , { 1 , 4 } , { 3 , 4 } , { 1 , 2 , 3 } , { 1 , 2 , 4 } , { 2 , 3 , 4 } } , { { 1 , 3 , 4 } , { 1 , 2 , 3 , 4 } } . \begin{aligned}
&\{\emptyset,\{2\}\},
\\
&\{\{1\},\{3\},\{4\},\{1,2\},\{2,3\},\{2,4\}\},
\\
&\{\{1,3\},\{1,4\},\{3,4\},\{1,2,3\},\{1,2,4\},\{2,3,4\}\},
\\
&\{\{1,3,4\},\{1,2,3,4\}\}.
\end{aligned} { ∅ , { 2 }} , {{ 1 } , { 3 } , { 4 } , { 1 , 2 } , { 2 , 3 } , { 2 , 4 }} , {{ 1 , 3 } , { 1 , 4 } , { 3 , 4 } , { 1 , 2 , 3 } , { 1 , 2 , 4 } , { 2 , 3 , 4 }} , {{ 1 , 3 , 4 } , { 1 , 2 , 3 , 4 }} .
练习 差为偶数
A = Z A=\mathbb{Z} A = Z ,x R y xRy x R y 当且仅当 x − y x-y x − y 为偶数。对 a = 2 a=2 a = 2 、b = 5 b=5 b = 5 判断:
a R b aRb a R b
[ 2 ] = [ 5 ] [2]=[5] [ 2 ] = [ 5 ]
[ 2 ] ∩ [ 5 ] ≠ ∅ [2]\cap[5]\neq\emptyset [ 2 ] ∩ [ 5 ] = ∅
解 差为偶数
2 − 5 2-5 2 − 5 为奇数,所以 a R b aRb a R b 不成立。[ 2 ] [2] [ 2 ] 是全体偶数,[ 5 ] [5] [ 5 ] 是全体奇数,两块既不相等也不相交。三条刻画在这里同时为假,与定理并不矛盾:定理说的是三条一起真或一起假。
反过来,每个划分也诱导一个等价关系:规定 x x x 与 y y y 相关当且仅当它们落在同一块。自反、对称显然。若 a a a 、b b b 同属 X X X ,b b b 、c c c 同属 Y Y Y ,则因块不相交必有 X = Y X=Y X = Y ,于是 a a a 与 c c c 同类,故传递。
定理 等价类构成划分
集合 S S S 上的等价关系,其等价类构成 S S S 的一个划分。反之,给定划分 { A i : i ∈ I } \{A_i:i\in I\} { A i : i ∈ I } ,存在等价关系,其等价类恰好就是这些 A i A_i A i 。
证明
自反性使每个元素都在自身的非空等价类中;前面的引理保证不同类不相交,并且所有类的并为 S S S ,因此构成划分。反过来,规定 x R y xRy x R y 当且仅当两者属于同一块。每个元素都在某块中,故自反;定义显然对称。若 x , y x,y x , y 同块、y , z y,z y , z 同块,两个块共有 y y y ,由不相交性必为同一块,故传递。对 x ∈ A i x\in A_i x ∈ A i ,与 x x x 相关的元素恰好就是 A i A_i A i ,所以 [ x ] R = A i [x]_R=A_i [ x ] R = A i ,也证明两种构造互相还原。
例 划分与关系互推
S = { 1 , 2 , 3 , 4 , 5 , 6 } S=\{1,2,3,4,5,6\} S = { 1 , 2 , 3 , 4 , 5 , 6 } 。模 3 3 3 同余给出 [ 1 ] = { 1 , 4 } [1]=\{1,4\} [ 1 ] = { 1 , 4 } ,[ 2 ] = { 2 , 5 } [2]=\{2,5\} [ 2 ] = { 2 , 5 } ,[ 3 ] = { 3 , 6 } [3]=\{3,6\} [ 3 ] = { 3 , 6 } 。
反过来,划分 A 1 = { 1 , 2 } A_1=\{1,2\} A 1 = { 1 , 2 } ,A 2 = { 3 , 4 } A_2=\{3,4\} A 2 = { 3 , 4 } ,A 3 = { 5 , 6 } A_3=\{5,6\} A 3 = { 5 , 6 } 诱导的关系是:两个数相关当且仅当它们在同一块里。
序关系
另一大家族是序:偏序、全序、良序。先从最宽的偏序说起。
偏序、全序与良序
定义 偏序与偏序集
集合 S S S 上自反、反对称、传递的关系叫做偏序 。配上这个关系的集合 ( S , R ) (S,R) ( S , R ) 叫做偏序集 ,或 poset。
最常见的偏序是 ≥ \ge ≥ 、⊆ \subseteq ⊆ 和整除。
例 整数上的大于等于
≥ \ge ≥ 在 Z \mathbb{Z} Z 上是偏序:a ≥ a a\ge a a ≥ a ;若 a ≥ b a\ge b a ≥ b 且 b ≥ a b\ge a b ≥ a 则 a = b a=b a = b ;a ≥ b a\ge b a ≥ b 且 b ≥ c b\ge c b ≥ c 蕴含 a ≥ c a\ge c a ≥ c 。因此 ( Z , ≥ ) (\mathbb{Z},\ge) ( Z , ≥ ) 是偏序集。
例 正整数上的整除
整除在 Z + \mathbb{Z}^+ Z + 上自反、反对称、传递,所以 ( Z + , ∣ ) (\mathbb{Z}^+,|) ( Z + , ∣ ) 是偏序集。
例 幂集上的包含
A ⊆ A A\subseteq A A ⊆ A ;若 A ⊆ B A\subseteq B A ⊆ B 且 B ⊆ A B\subseteq A B ⊆ A 则 A = B A=B A = B ;A ⊆ B A\subseteq B A ⊆ B 且 B ⊆ C B\subseteq C B ⊆ C 蕴含 A ⊆ C A\subseteq C A ⊆ C 。因此 ( P ( S ) , ⊆ ) (P(S),\subseteq) ( P ( S ) , ⊆ ) 是偏序集。
记号 偏序符号
任意偏序都用 ≼ \preccurlyeq ≼ 写 a ≼ b a\preccurlyeq b a ≼ b 。若还要求 a ≠ b a\neq b a = b ,则写 a ≺ b a\prec b a ≺ b 。
定义 可比较
偏序集 ( S , ≼ ) (S,\preccurlyeq) ( S , ≼ ) 中,若 a ≼ b a\preccurlyeq b a ≼ b 或 b ≼ a b\preccurlyeq a b ≼ a ,称 a a a 、b b b 可比较 ;否则称不可比较 。
例 3 与 9,4 与 5
在 ( Z + , ∣ ) (\mathbb{Z}^+,|) ( Z + , ∣ ) 中,3 ∣ 9 3\mid 9 3 ∣ 9 ,所以 3 3 3 与 9 9 9 可比较。4 ∤ 5 4\nmid 5 4 ∤ 5 且 5 ∤ 4 5\nmid 4 5 ∤ 4 ,所以 4 4 4 与 5 5 5 不可比较。
“偏”就偏在这里:有些元素根本比不了。若任意两个都能比,就得到全序。
定义 全序
若偏序集 ( S , ≼ ) (S,\preccurlyeq) ( S , ≼ ) 中任意两个元素都可比较,则称 S S S 为全序集 或线性序集 ,≼ \preccurlyeq ≼ 为全序或线性序。全序集也叫链。
≤ \le ≤ 与 ≥ \ge ≥ 都是全序。
例 词典
词典里的单词按字母序排列,任意两个都能比出先后,所以是全序。
例 有向直线
指定了方向的直线上,任意两点都能比出谁在前,所以是全序。
定义 良序
偏序集 ( S , ≼ ) (S,\preccurlyeq) ( S , ≼ ) 称为良序集 ,若 ≼ \preccurlyeq ≼ 是全序,并且 S S S 的每个非空子集都有最小元。
例 自然数
( N , ≤ ) (\mathbb{N},\le) ( N , ≤ ) 既是全序也是良序:每个非空子集都有最小元。
反例 全序未必是良序
令 S = { 1 / n : n ∈ N , n ≥ 1 } S=\{1/n:n\in\mathbb{N},\ n\geq 1\} S = { 1/ n : n ∈ N , n ≥ 1 } 。通常的 ≤ \le ≤ 在 S S S 上是全序,却不是良序:非空子集 S S S 本身就没有最小元。对任何 1 / n ∈ S 1/n\in S 1/ n ∈ S ,集合中总还有更小的 1 / ( n + 1 ) 1/(n+1) 1/ ( n + 1 ) 。自然数的良序性保证非空子集有最小元,并不保证有最大元。
例 前一百个正整数
{ 1 , 2 , … , 100 } \{1,2,\ldots,100\} { 1 , 2 , … , 100 } 配上 ≤ \le ≤ 是良序,因为它是良序集 N \mathbb{N} N 的有限子集。
良序保证归纳能踩到实在的起点。
定理 良序归纳
设 S S S 是良序集。若对每个 y ∈ S y\in S y ∈ S ,只要所有 x ≺ y x\prec y x ≺ y 都使 P ( x ) P(x) P ( x ) 为真,就有 P ( y ) P(y) P ( y ) 为真,则 P ( x ) P(x) P ( x ) 对一切 x ∈ S x\in S x ∈ S 为真。
证明
若不然,集合 A = { x ∈ S : P ( x ) 为假 } A=\{x\in S:P(x)\text{ 为假}\} A = { x ∈ S : P ( x ) 为假 } 非空,因而有最小元 a a a 。于是所有 x ≺ a x\prec a x ≺ a 都使 P ( x ) P(x) P ( x ) 为真,归纳步骤迫使 P ( a ) P(a) P ( a ) 为真,矛盾。
字典序
词典按第一个不同的字母排序。把这件事搬到两个偏序集的笛卡尔积上,就得到字典序。
定义 字典序
给定偏序集 ( A 1 , ≼ 1 ) (A_1,\preccurlyeq_1) ( A 1 , ≼ 1 ) 与 ( A 2 , ≼ 2 ) (A_2,\preccurlyeq_2) ( A 2 , ≼ 2 ) ,A 1 × A 2 A_1\times A_2 A 1 × A 2 上的字典序 先比第一分量,第一分量相等时再比第二分量。其严格部分为
( a 1 , a 2 ) ≺ ( b 1 , b 2 ) ⟺ a 1 ≺ 1 b 1 或 ( a 1 = b 1 且 a 2 ≺ 2 b 2 ) . (a_1,a_2)\prec(b_1,b_2)
\quad\Longleftrightarrow\quad
a_1\prec_1 b_1
\quad\text{或}\quad
\bigl(a_1=b_1\text{ 且 }a_2\prec_2 b_2\bigr). ( a 1 , a 2 ) ≺ ( b 1 , b 2 ) ⟺ a 1 ≺ 1 b 1 或 ( a 1 = b 1 且 a 2 ≺ 2 b 2 ) .
并上相等就得到偏序 ≼ \preccurlyeq ≼ 。
证明
自反:( a 1 , a 2 ) (a_1,a_2) ( a 1 , a 2 ) 与自己比,第一分量相等且 a 2 ≼ 2 a 2 a_2\preccurlyeq_2 a_2 a 2 ≼ 2 a 2 。
反对称:若双向都成立且 a 1 ≠ b 1 a_1\neq b_1 a 1 = b 1 ,则第一分量的严格不等式会互相打架。故 a 1 = b 1 a_1=b_1 a 1 = b 1 ,此时第二分量给出 a 2 = b 2 a_2=b_2 a 2 = b 2 。
传递:第一分量已经严格有序时,用 ≼ 1 \preccurlyeq_1 ≼ 1 的传递;第一分量相等时,用 ≼ 2 \preccurlyeq_2 ≼ 2 的传递。
两个分量都是全序时,字典序也是全序。
例 两个小偏序集的字典序
A 1 = { 1 , 2 } A_1=\{1,2\} A 1 = { 1 , 2 } 配通常的 ≤ \le ≤ ,A 2 = { a , b } A_2=\{a,b\} A 2 = { a , b } 且 a ≤ 2 b a\le_2 b a ≤ 2 b 。则 ( 1 , a ) ≤ ( 2 , a ) (1,a)\le(2,a) ( 1 , a ) ≤ ( 2 , a ) ,因为 1 < 2 1<2 1 < 2 ;( 2 , a ) ≤ ( 2 , b ) (2,a)\le(2,b) ( 2 , a ) ≤ ( 2 , b ) ,因为第一分量相等且 a ≤ 2 b a\le_2 b a ≤ 2 b 。( 1 , a ) (1,a) ( 1 , a ) 小于 ( 2 , b ) (2,b) ( 2 , b ) ,此时不必再看第二分量。
这个构造可以对任意有限个偏序集迭代,得到 n n n 元组上的字典序,也就是字符串比较的数学版。
Hasse 图
本小节关于 Hasse 图构建与偏序集可视化的内容为源讲义保留的大纲占位。
极大元与极小元
本小节关于偏序集中极大元、极小元、最大元与最小元的严格形式化定义与例题已列入后续撰写队列。
格
本小节关于格(Lattice)、上确界(Join)、下确界(Meet)及分配格性质的内容已列入后续撰写队列。
拓扑排序
本小节关于有限偏序集拓扑排序原理与 DAG 线性扩展算法的内容已列入后续撰写队列。
习题
练习 把字典序做成良序
对字典序的证明做一点改动,使它成为良序。
解 把字典序做成良序
让 A 1 A_1 A 1 、A 2 A_2 A 2 都是良序集,例如从 1 1 1 起的正整数。全序已经有了。非空子集先看第一分量组成的非空子集,取它的最小元 a 1 a_1 a 1 ,再在第一分量为 a 1 a_1 a 1 的那些对里看第二分量,再取最小。得到的对就是原子集的最小元。
练习 小于或模 2 同余
在 Z \mathbb{Z} Z 上规定
x R y 当且仅当 x < y 或 x ≡ y ( m o d 2 ) . xRy\quad\text{当且仅当}\quad x<y\text{ 或 }x\equiv y\pmod{2}. x R y 当且仅当 x < y 或 x ≡ y ( mod 2 ) . R R R 自反吗?对称吗?反对称吗?传递吗?每条都要完整论证。
解 小于或模 2 同余
自反。 对任意整数 x x x ,x ≡ x ( m o d 2 ) x\equiv x\pmod{2} x ≡ x ( mod 2 ) ,所以 x R x xRx x R x 。
对称。 2 R 3 2R3 2 R 3 因为 2 < 3 2<3 2 < 3 ,但 3 R̸ 2 3\not R 2 3 R 2 :既没有 3 < 2 3<2 3 < 2 ,也没有 3 ≡ 2 ( m o d 2 ) 3\equiv 2\pmod{2} 3 ≡ 2 ( mod 2 ) 。所以不对称。
反对称。 2 R 4 2R4 2 R 4 因为 2 < 4 2<4 2 < 4 ,同时 4 R 2 4R2 4 R 2 因为 4 ≡ 2 ( m o d 2 ) 4\equiv 2\pmod{2} 4 ≡ 2 ( mod 2 ) ,但 2 ≠ 4 2\neq 4 2 = 4 。所以不反对称。
传递。 2 R 3 2R3 2 R 3 因为 2 < 3 2<3 2 < 3 ,3 R 1 3R1 3 R 1 因为 3 ≡ 1 ( m o d 2 ) 3\equiv 1\pmod{2} 3 ≡ 1 ( mod 2 ) ,但 2 R̸ 1 2\not R 1 2 R 1 :既没有 2 < 1 2<1 2 < 1 ,也没有 2 ≡ 1 ( m o d 2 ) 2\equiv 1\pmod{2} 2 ≡ 1 ( mod 2 ) 。所以不传递。
练习 偏序与等价硬拼在一起
解释:为什么把偏序条件和等价条件用“或”连在一起,会得到上一题那种四不像。
解 偏序与等价硬拼在一起
偏序要自反、反对称、传递。等价要自反、对称、传递。用“或”拼起来,自反还能保住,因为两边各自都自反。但反对称与对称互相拆台:小于给出单向,x ≡ y ( m o d 2 ) x\equiv y\pmod{2} x ≡ y ( mod 2 ) 又给不同的偶数互相关。传递也被两种机制搅乱,例如 2 < 3 2<3 2 < 3 再接上 3 ≡ 1 ( m o d 2 ) 3\equiv 1\pmod{2} 3 ≡ 1 ( mod 2 ) ,跨不过去。所以既不是偏序也不是等价。
n n n 元关系
本节关于 n n n 元关系与关系数据库模型(投影、连接与主键运算)的内容为源讲义保留的大纲占位,已列入后续撰写队列。
查找算法
查找要在长度为 n n n 的数组 A A A 里定位目标 T T T 。代价取决于 A A A 有没有序。
在无序数组里查找
没有顺序时,只能依次检查 A [ 1 ] , … , A [ n ] A[1],\ldots,A[n] A [ 1 ] , … , A [ n ] 。这就是线性查找。
算法 1 线性查找
1: procedure LinearSearch (A , T A, T A , T )
2: for j ← 1 j \gets 1 j ← 1 to n n n do
3: if A [ j ] = T A[j] = T A [ j ] = T then
5: end if
6: end for
7: return − 1 -1 − 1
8: end procedure
最坏情况要把每一项都看一遍,时间是 O ( n ) O(n) O ( n ) 。若 T T T 正好在第一格,一次比较就结束。最好情况用 Ω \Omega Ω 记号,上下夹紧的界用 Θ \Theta Θ 记号。
Ω ( g ( n ) ) \Omega(g(n)) Ω ( g ( n )) 是至少和 g g g 长得一样快的函数:存在 c > 0 c>0 c > 0 和 n 0 n_0 n 0 ,使得对一切 n ≥ n 0 n\ge n_0 n ≥ n 0 都有 0 ≤ c g ( n ) ≤ f ( n ) 0\le c g(n)\le f(n) 0 ≤ c g ( n ) ≤ f ( n ) 。
Θ ( g ( n ) ) \Theta(g(n)) Θ ( g ( n )) 是被 g g g 的两个正倍数夹住的函数:存在 c 1 , c 2 > 0 c_1,c_2>0 c 1 , c 2 > 0 和 n 0 n_0 n 0 ,使得对一切 n ≥ n 0 n\ge n_0 n ≥ n 0 都有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0\le c_1 g(n)\le f(n)\le c_2 g(n) 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 。
若目标等可能出现在任一位置,平均探查次数是
p ˉ = 1 n ∑ i = 1 n i = n + 1 2 , \bar p=\frac1n\sum_{i=1}^n i=\frac{n+1}{2}, p ˉ = n 1 i = 1 ∑ n i = 2 n + 1 ,
所以线性查找的平均代价是 Θ ( n ) \Theta(n) Θ ( n ) 。
在有序数组里查找
定义 有序数组
数组 A A A 有序,是指 A [ 1 ] ≤ ⋯ ≤ A [ n ] A[1]\le\cdots\le A[n] A [ 1 ] ≤ ⋯ ≤ A [ n ] 或 A [ 1 ] ≥ ⋯ ≥ A [ n ] A[1]\ge\cdots\ge A[n] A [ 1 ] ≥ ⋯ ≥ A [ n ] 。
拿 A [ i ] A[i] A [ i ] 比一次,就能丢掉一半:
若 T < A [ i ] T<A[i] T < A [ i ] ,则 T T T 不可能出现在 A [ i ] , … , A [ n ] A[i],\ldots,A[n] A [ i ] , … , A [ n ] ;
若 A [ i ] < T A[i]<T A [ i ] < T ,则 T T T 不可能出现在 A [ 1 ] , … , A [ i ] A[1],\ldots,A[i] A [ 1 ] , … , A [ i ] 。
要把最坏情况压得尽量小,就在当前子段 A [ p ] , … , A [ q ] A[p],\ldots,A[q] A [ p ] , … , A [ q ] 的中点附近探查,取 j = ⌊ ( p + q ) / 2 ⌋ j=\bigl\lfloor(p+q)/2\bigr\rfloor j = ⌊ ( p + q ) /2 ⌋ 。这就是二分查找。
算法 2 二分查找
1: procedure BinarySearch (A , T A, T A , T )
2: p ← 1 p \gets 1 p ← 1
3: q ← n q \gets n q ← n
4: while p ≤ q p \leq q p ≤ q do
5: j ← ⌊ ( p + q ) / 2 ⌋ j \gets \bigl\lfloor (p+q)/2 \bigr\rfloor j ← ⌊ ( p + q ) /2 ⌋
6: if A [ j ] = T A[j] = T A [ j ] = T then
8: else if A [ j ] < T A[j] < T A [ j ] < T then
10: else
12: end if
13: end while
14: return − 1 -1 − 1
15: end procedure
比较过程可以在 这段演示 里看。
取 n = 12 n=12 n = 12 ,A = ( 3 , 5 , 8 , 8 , 9 , 16 , 29 , 41 , 50 , 63 , 64 , 67 ) A=(3,5,8,8,9,16,29,41,50,63,64,67) A = ( 3 , 5 , 8 , 8 , 9 , 16 , 29 , 41 , 50 , 63 , 64 , 67 ) 。若 T = 99 T=99 T = 99 ,各变量如下变化。
p p p j j j q q q A [ j ] A[j] A [ j ] 关系 输出 1 6 12 16 A [ j ] < T A[j]<T A [ j ] < T 7 9 12 50 A [ j ] < T A[j]<T A [ j ] < T 10 11 12 64 A [ j ] < T A[j]<T A [ j ] < T 12 12 12 67 A [ j ] < T A[j]<T A [ j ] < T 13 12 T T T 不在 A A A 中
记当前长度为 k = q − p + 1 k=q-p+1 k = q − p + 1 ,探查失败后拆成 k 1 = j − p k_1=j-p k 1 = j − p 和 k 2 = q − j k_2=q-j k 2 = q − j 。取 j = ⌊ ( p + q ) / 2 ⌋ j=\lfloor(p+q)/2\rfloor j = ⌊( p + q ) /2 ⌋ 会让 k 1 k_1 k 1 是较短的那一半。
定理 二分查找的子段长度
每一轮取 j = ⌊ ( p + q ) / 2 ⌋ j=\bigl\lfloor(p+q)/2\bigr\rfloor j = ⌊ ( p + q ) /2 ⌋ 时,剩下的长度满足
k 1 = ⌊ k − 1 2 ⌋ ≤ k 2 = ⌈ k − 1 2 ⌉ ≤ k 2 . k_1=\Bigl\lfloor\frac{k-1}{2}\Bigr\rfloor
\le
k_2=\Bigl\lceil\frac{k-1}{2}\Bigr\rceil
\le\frac k2. k 1 = ⌊ 2 k − 1 ⌋ ≤ k 2 = ⌈ 2 k − 1 ⌉ ≤ 2 k .
证明
由 j ≤ ( q + p ) / 2 < j + 1 j\le(q+p)/2<j+1 j ≤ ( q + p ) /2 < j + 1 ,两边减 p p p 得到 k 1 ≤ ( q − p ) / 2 < k 1 + 1 k_1\le(q-p)/2<k_1+1 k 1 ≤ ( q − p ) /2 < k 1 + 1 ,所以 k 1 = ⌊ ( k − 1 ) / 2 ⌋ k_1=\lfloor(k-1)/2\rfloor k 1 = ⌊( k − 1 ) /2 ⌋ 。再由 k 1 + k 2 = k − 1 k_1+k_2=k-1 k 1 + k 2 = k − 1 得到 k 2 k_2 k 2 的界。
定理 二分查找会停
二分查找至多探查 ⌈ lg n ⌉ + 1 \lceil\lg n\rceil+1 ⌈ lg n ⌉ + 1 次就会停。
证明
令 w = ⌊ lg n ⌋ w=\lfloor\lg n\rfloor w = ⌊ lg n ⌋ 。失败 w w w 次之后,当前长度 k k k 不超过 n / 2 w n/2^w n / 2 w 。因为 2 w ≤ n < 2 w + 1 2^w\le n<2^{w+1} 2 w ≤ n < 2 w + 1 ,所以 1 ≤ n / 2 w < 2 1\le n/2^w<2 1 ≤ n / 2 w < 2 ,从而 k = 1 k=1 k = 1 。下一次探查只剩这一格,找到就返回,找不到就把 p > q p>q p > q 。
定义 循环不变式
循环不变式是在循环每一轮开始前和结束后都成立的断言。
设 T T T 出现在下标 i i i 。第一种算法的不变式是:经过 k k k 轮之后,若 T = A [ i ] T=A[i] T = A [ i ] ,则 p ≤ i ≤ q p\le i\le q p ≤ i ≤ q 。
定理 二分查找的循环不变式
经过 k k k 轮之后,若 T = A [ i ] T=A[i] T = A [ i ] ,则 p ≤ i ≤ q p\le i\le q p ≤ i ≤ q 。
证明
对 k k k 作归纳。循环开始前 p = 1 p=1 p = 1 、q = n q=n q = n 。假设 w w w 轮后成立,下一轮算出 j n e w = ⌊ ( p + q ) / 2 ⌋ j_{\mathrm{new}}=\lfloor(p+q)/2\rfloor j new = ⌊( p + q ) /2 ⌋ ,于是 p ≤ j n e w ≤ q p\le j_{\mathrm{new}}\le q p ≤ j new ≤ q 。若 A [ j n e w ] < T A[j_{\mathrm{new}}]<T A [ j new ] < T ,新的左端是 j n e w + 1 j_{\mathrm{new}}+1 j new + 1 ;若 A [ j n e w ] > T A[j_{\mathrm{new}}]>T A [ j new ] > T ,新的右端是 j n e w − 1 j_{\mathrm{new}}-1 j new − 1 ;相等则两端不动。只要 T T T 还在数组里,i i i 就仍落在留下的区间中。
循环以 p > q p>q p > q 结束时,[ p , q ] [p,q] [ p , q ] 里没有下标,T T T 不在 A A A 中。否则已经在探查 j j j 处返回。所以算法正确,而且比线性查找便宜得多。
分支图
定义 分支图
算法的分支图是一棵树,画出它可能执行的全部操作序列。
n = 12 n=12 n = 12 时第一次探查 A [ 6 ] A[6] A [ 6 ] 。两次比较分别走向 A [ 3 ] A[3] A [ 3 ] 或 A [ 9 ] A[9] A [ 9 ] ,依此类推。
这是一棵二叉树:根在顶上,每个点向下至多两条边,没有向下边的是叶子,除根以外每个点恰有一条来自上方的边。
二分查找的第二版
第二版把右端改成 q ← j q\gets j q ← j ,循环里只比较 A [ j ] < T A[j]<T A [ j ] < T 。
算法 3 二分查找第二版
1: procedure BinarySearch (A , T A, T A , T )
2: p ← 1 p \gets 1 p ← 1
3: q ← n q \gets n q ← n
4: while p < q p < q p < q do
5: j ← ⌊ ( p + q ) / 2 ⌋ j \gets \bigl\lfloor (p+q)/2 \bigr\rfloor j ← ⌊ ( p + q ) /2 ⌋
6: if A [ j ] < T A[j] < T A [ j ] < T then
8: else
10: end if
11: end while
12: if A [ p ] = T A[p] = T A [ p ] = T then
14: else
16: end if
17: end procedure
同一个 T = 99 T=99 T = 99 的表少一轮。
p p p j j j q q q p < q p<q p < q A [ j ] A[j] A [ j ] A [ j ] < T A[j]<T A [ j ] < T 输出 1 6 12 t 16 t 7 9 12 t 50 t 10 11 12 t 64 t 12 12 f T T T 不在 A A A 中
这时 A [ j ] A[j] A [ j ] 是左段的最后一格,不再单独占第三块。若 A [ j ] < T A[j]<T A [ j ] < T ,下一步看 A [ j + 1 ] , … , A [ q ] A[j+1],\ldots,A[q] A [ j + 1 ] , … , A [ q ] ;否则看 A [ p ] , … , A [ j ] A[p],\ldots,A[j] A [ p ] , … , A [ j ] 。取 j = ⌊ ( p + q ) / 2 ⌋ j=\lfloor(p+q)/2\rfloor j = ⌊( p + q ) /2 ⌋ 时,新长度满足 k 2 = ⌊ k / 2 ⌋ ≤ k / 2 ≤ k 1 = ⌈ k / 2 ⌉ k_2=\lfloor k/2\rfloor\le k/2\le k_1=\lceil k/2\rceil k 2 = ⌊ k /2 ⌋ ≤ k /2 ≤ k 1 = ⌈ k /2 ⌉ 。因此有的轮次里,下一段比上一段的一半还长。
记 L ( w ) L(w) L ( w ) 为 while 循环进行 w w w 轮后仍要查找的长度。
定理 第二版的长度界
经过 w w w 轮之后,
⌊ n 2 w ⌋ ≤ L ( w ) ≤ ⌈ n 2 w ⌉ . \Bigl\lfloor\frac n{2^w}\Bigr\rfloor\le L(w)\le\Bigl\lceil\frac n{2^w}\Bigr\rceil. ⌊ 2 w n ⌋ ≤ L ( w ) ≤ ⌈ 2 w n ⌉ .
证明
w = 0 w=0 w = 0 时 L ( 0 ) = n L(0)=n L ( 0 ) = n 。假设第 m m m 步成立。下一步是对 L ( m ) L(m) L ( m ) 取一半再取整。下取整和上取整都单调,并且对任意实数 x x x 有 ⌊ ⌊ x ⌋ / 2 ⌋ = ⌊ x / 2 ⌋ \lfloor\lfloor x\rfloor/2\rfloor=\lfloor x/2\rfloor ⌊⌊ x ⌋ /2 ⌋ = ⌊ x /2 ⌋ 、⌈ ⌈ x ⌉ / 2 ⌉ = ⌈ x / 2 ⌉ \lceil\lceil x\rceil/2\rceil=\lceil x/2\rceil ⌈⌈ x ⌉ /2 ⌉ = ⌈ x /2 ⌉ 。令 x = n / 2 m x=n/2^m x = n / 2 m ,第 m + 1 m+1 m + 1 步仍是同一形状的界。
定理 第二版会停
形如“A [ j ] < T A[j]<T A [ j ] < T ?”的比较至多做 ⌈ lg n ⌉ \lceil\lg n\rceil ⌈ lg n ⌉ 次;当 p = q p=q p = q 时,当前子段长度为 1 1 1 。
引理
若实数 x < y x<y x < y ,则 ⌈ x ⌉ ≤ ⌈ y ⌉ \lceil x\rceil\le\lceil y\rceil ⌈ x ⌉ ≤ ⌈ y ⌉ 且 ⌊ x ⌋ ≤ ⌊ y ⌋ \lfloor x\rfloor\le\lfloor y\rfloor ⌊ x ⌋ ≤ ⌊ y ⌋ 。
n = 12 n=12 n = 12 时第二版的分支图仍是二叉树,但每个内点恰好两条向下的边:满二叉树。
定理 满二叉树的叶子数
有 m m m 个内点的满二叉树有 m + 1 m+1 m + 1 片叶子。
证明
对 m m m 归纳。m = 1 m=1 m = 1 时根有两个叶子儿子。再加一个内点,等于把一片叶子变成内点并添两个新叶子,叶子数增加 1 1 1 。
习题
练习 查找失败时插在哪里
若二分查找没有找到 T T T ,它该插在哪?
最终的 q q q 是否总比最终的 p p p 小 1 1 1 ?
何时有 A [ q ] < T < A [ p ] A[q]<T<A[p] A [ q ] < T < A [ p ] ?
若 p p p 一直是 1 1 1 ,是否 T < A [ 1 ] T<A[1] T < A [ 1 ] ?
若 q q q 一直是 n n n ,是否 A [ n ] < T A[n]<T A [ n ] < T ?
解 查找失败时插在哪里
最终的 q q q 不必总是 p − 1 p-1 p − 1 ,取决于两端怎么挪。A [ q ] < T < A [ p ] A[q]<T<A[p] A [ q ] < T < A [ p ] 描述的是有序数组里 T T T 该待的缝。若 p p p 从未增大,则 T < A [ 1 ] T<A[1] T < A [ 1 ] ;若 q q q 从未减小,则 A [ n ] < T A[n]<T A [ n ] < T 。
二分查找最好情形用 Ω \Omega Ω ,最坏情形用 O O O 。平均情形能不能写成 Θ \Theta Θ ?
最好情形是第一次就探到中点,Ω ( 1 ) \Omega(1) Ω ( 1 ) 。最坏是 O ( log n ) O(\log n) O ( log n ) 次。平均的 Θ \Theta Θ 界需要在目标下标的概率模型下同时有上界和下界。教材里通常只说平均 O ( log n ) O(\log n) O ( log n ) ,并不给 Θ \Theta Θ ,因为那个模型并不唯一。
参考文献
[1] T. Banakh, “Classical Set Theory: Theory of Sets and Classes,” arXiv:2006.01613, 2026. Version 6, August 15, 2026; NBG sets, classes, and class existence. https://arxiv.org/abs/2006.01613 ↩
评论