title | tags | |||
---|---|---|---|---|
00. 集合 |
|
抽象代数(Abstract algebra),又名近世代数,是现代数学的重要基础之一,它研究群、环、域这三种基本的代数结构的结构理论。zk理论中大量使用到了抽象代数的概念,因此学习者应该熟悉抽象代数的基础知识。
在这一讲,我们主要学习抽象代数的基础:集合论。
集合是由不同对象组成的整体(collections of objects)的数学模型,这些对象被称为集合的元素(elements)。整数(Integers)、有理数(Rational numbers)、实数(Real numbers)、复数(Complex numbers)、矩阵(Matrices)、多项式(Polynomials)、多边形(Polygons)以及其他的很多概念实质上都是集合。
常用集合缩写:
$\mathbb{N}$ 表示全体自然数集合(Natural numbers),$\mathbb{Z}$ 表示全体整数集合("Zahl" is Integer in German),$\mathbb{Q}$ 表示全体有理数集合(Rational numbers),$\mathbb{R}$ 表示全体实数集合(Real numbers),$\mathbb{C}$ 表示全体复数集合(Complex numbers)
我们将集合中元素数目定义为集合的基数(cardinality)。当基数为有限大,则称之为有限集合,否则为无限集合。有一类特殊的集合,它不包含任何元素,称之为空集
- 空集是任何非空集合的真子集;
- 空集是任何集合的子集。
确定性:给定一个集合
互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。有时需要对同一元素出现多次的情形进行刻画,可以使用多重集,其中的元素允许出现多次。
S = {1, 1, 2}
for elem in S:
print(elem)
# 1
# 2
无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序。但就集合本身的特性而言,元素之间没有必然的序。
S = {'0xaa', 123, 'a', 0.123}
# 无序性
for elem in S:
print(elem)
# 0xaa
# 0.123
# 123
# a
考虑整数集和有理数集这两个集合,二者之间似乎存在某种关系:所有的整数都是有理数,但并非所有的有理数都是整数。我们定义:整数集是有理数集的子集(subset),相反地,有理数集是整数集的超集(superset)。
注意:
- 交集:由属于
$A$ 且属于$B$ 的相同元素组成的集合,记作$A\bigcap B$ (或$B \bigcap A$ )。 - 并集:由所有属于集合
$A$ 或属于集合$B$ 的元素所组成的集合,记作$A\bigcup B$ (或$B\bigcup A$ )
二者遵循交换律、结合律和分配律。
如果两个集合中包含的元素完全一致(无需考虑顺序),那么则称二者等价。用严格的数学语言表示为: 如果
如前面所述,我们把集合中元素的数目定义为基数。一般而言,有限集合的基数才是有意义的,我们记作:
集合的元素是无序的,有序对(order pairs)是从集合中产生的一种新的数据结构。在编程世界中,程序员更愿意称其为元组(tuple)。
那么如何在无序的集合中生成有序对呢?具体实现方式是将元组
注意有序对(元组)的元素数目可以是任意个。
定义两个集合
笛卡尔积不遵循交换律。
借助笛卡尔积这个运算,我们就可以从数学角度上定义函数(function)。比如我们需要定义函数 f,满足
因此,在集合论中,函数就是域集(domain set)和共域集(codomain set)的笛卡尔积的子集。换句话说,只要我们有定义域集合和值域集合,二者的笛卡尔积能够得到从定义域到值域的所有可能的映射(mapping)关系,函数定义为这些映射关系的一个子集。
数学家很少关心可计算性。即数学家定义了两个集合之间的一个函数,但是这个函数是怎样计算的(具体的数学公式),数学家是不关心的。
程序员反之,他们认为:所有的函数都是可计算的,有具体数学公式的。
在大多数情况,函数这个说法和映射是等价的。当然,如何定义映射(函数)决定了其可用性。比如我们把所有东西映射为 0 ,这当然是合理的,但这种映射基本没有可用性可言。
选择公理(Axiom of Choice):一组非空集合的笛卡尔积是非空的。
我们定义函数为两个集合笛卡尔积的一个子集,但是这个子集并不是任意的,需要对其进行限制:给定一个输入,函数的输出是唯一的。
有三种映射方式满足函数的要求:
- 单射(injective function):值域的元素最多对应到一个定义域的元素(也称之为原像,preimage)。值域的元素可以不对应任何定义域中的原像。但是如果定义域中原像对应了同一个值域元素,那这个函数就不满足单射。
- 满射(surjective function):值域的元素至少对应一个定义域的元素。如果存在值域的某个元素没有对应的原像,那么函数就不满足满射。
- 双射(bijective function):当且仅当函数既满足单射、又满足满射的情况下,称函数是双射的。
对于上述映射,最重要的是如何定义定义域(domain)和值域(codomain),不同的定义域和值域会产生不一样的映射。
双射和满射在讨论同构和同态概念时也十分重要,请务必记住这些基础概念定义。
关系(Relation)是一个非常微妙的概念,当阅读 ZKP 相关论文时你会经常看到这一概念。其实在上述描述中我们已经接触到了关系,比如交并集、子超集、相等等都是集合之间的关系。
但从数学上讲,关系被定义为:“两个集合的笛卡尔积取子集”。不难发现这个定义和函数(或者映射)的定义别无二致。
由于涉及到两个集合之间确定的关系,我们也称之为二元关系,这在之后群、环、域的理论学习中会继续提及。