本文提供了几个代数群的例子,以便您能对它们建立直观的认识。
群(group)是一个包含以下特征的集合:
- 一个封闭的二元运算符
- 该二元运算符满足结合律
- 一个单位元(identity element)
- 每个元素都有一个逆元(inverse)
我们之前还讨论过阿贝尔群(abelian groups)。阿贝尔群有一个额外的要求,即二元运算符必须满足交换律。
现在是时候将群作为一种数学结构来进行讨论了。
使用整数加法作为群的例子时,一个令人困惑的地方是学生经常会问:“但你难道不能把整数相乘吗?”
不可否认,这确实容易让人混淆。还有其他的代数结构,比如环(rings)和域(fields),它们涉及两个二元运算符。但是,就目前而言,请将群看作是只有一个固定不变的二元运算符的结构,而且从群的视角来看,任何其他可能的二元运算符要么不存在,要么不需要关注。
更令人困惑的是:有时候二元运算符是其他二元运算符伪装的。
例如,在处理只有加法运算的群时,有时作者会随意提及乘法,即使该群并没有这个二元运算符。在这种语境下的乘法,实际上只是重复执行某次加法运算特定次数的简写形式。
群的示例
感受群的最好方法就是看大量的例子。让我们开始吧。
1. 平凡群(The trivial group)
假设我们的群是一个由数字 组成的集合,其二元运算符为加法。很明显,该二元运算符是封闭的且满足结合律
而且每个元素都有一个单位元和逆元。
这并不是一个有趣的群,但它是你能创建的最小的有效群。
请注意,群不能为空,因为根据定义,它必须包含一个单位元。
作为留给读者的练习,请证明带有二元运算符 的集合 是一个群。
2. 实数在乘法下不是群
尽管实数()在乘法下有单位元(数字 ),并且是封闭的且满足结合律,但并不是所有的实数都有逆元。
实数可以通过取其乘法逆元()来求逆,但是零虽然也是实数,却不能求逆,因为 是未定义的,且不是实数。
严格来说, 的逆元是 ,使得 。这里的含义是,如果 ,则在集合中不存在元素 能使得 。
然而,不包括零的正实数在乘法下是一个群。每个元素都有一个逆元(),并且单位元是 1。
练习: 整数(正数和负数)在乘法下不是群。请说明这不满足四个要求(封闭性、结合律、存在单位元、所有元素都有逆元)中的哪一个或哪几个。
3. 实数的 矩阵在加法下是一个群
让我们来分析一下:
矩阵加法是封闭的且满足结合律。如果你将一个实数 矩阵与另一个实数 矩阵相加,你会得到一个实数 矩阵。
单位矩阵是一个全为零的 矩阵。
矩阵的逆元是该矩阵乘以 -1。
嘿,等等,我们不是不允许乘以 -1 吗?
群并不要求逆元“必须能使用群的二元运算符来计算得出”,只要求它存在。也就是说,我们将逆元计算为每个元素乘以 ,即使乘以 并不是群运算。
如果我们将 矩阵的运算符定义为阿达马乘积(Hadamard product,逐元素乘法),出于上述讨论的相同原因,这将不能成为一个群。具体来说,逆元是计算矩阵中每个元素的倒数,如果其中一个元素是零,那么这个逆元就无法计算。
如果我们将运算符定义为方阵上的传统矩阵乘法,则它是否是一个群取决于集合的定义,正如我们将在第 5 节的例子中看到的那样。
4. 欧几里得平面上 2D 点的集合在逐元素加法下是一个群
这其实是前一个例子的特殊情况,但让我们从不同的角度来看待它。
考虑标准 2D 平面上所有实数值 点的集合。
我们的二元运算符是将点相加,例如 。
我们的单位元是原点,因为与原点相加,其他点的位置保持不变。
一个点的逆元就是它关于原点的“镜像”( 和 坐标取反),因为当你将一个点与它的逆元相加时,结果就是原点。
5. 行列式非零的 矩阵在乘法下是一个群
复习一下,如果一个矩阵的行列式非零,那么它就是可逆的。当一个行列式非零的矩阵乘以另一个行列式非零的矩阵时,乘积同样具有非零行列式。事实上,我们可以更具体点,如果 、 和 是方阵,并且 ,那么 。
让我们根据定义来梳理一下:
- 非零行列式矩阵的乘法是封闭的,因为乘积将始终具有非零行列式,你无法“离开这个群”。矩阵乘法满足结合律。
- 单位元就是单位矩阵(主对角线全为 1,其余全为零)。
- 逆元就是矩阵的逆,而行列式非零的矩阵是可逆的。
6. 行列式为零的 矩阵在乘法下不是群
请记住,行列式为零的矩阵是不能求逆的,所以这个集合不可能有逆元。在这种情况下,我们也没有单位元,因为单位矩阵的行列式为一。由于没有单位元,这个集合和二元运算符甚至不能构成一个幺半群(monoid),它只是一个半群(semigroup)。
7. 具有固定次数上限的所有多项式集合在加法下是一个群
如果我们说“在加法下,所有次数不超过 7 的实系数多项式”,这是一个有效的群。
- 多项式加法是封闭的且满足结合律
- 单位元是多项式 (准确地说是 )
- 逆元是将系数乘以
- 我们不能说次数“必须等于 7”,因为单位元的次数是 0,这样它就不会属于该群。
具有固定次数上限的多项式在乘法下不是一个群,因为通常在多项式相乘时次数会变大,因此该运算符将不具备封闭性。
8. 模素数的加法是一个群
让我们以素数 为例。
在这里,单位元依然是 ,因为加上 会得到原本的数字。
在这种情况下, 的逆元是什么?
它就是 ,因为 ,或者说 等于零(单位元)。
9. 模素数的乘法不是群
在这个例子中,零没有逆元。
如果我们去除了数字 ,那么它就是一个群。此时单位元是 1,而元素 的逆元是它的模逆元 。
10. 固定底数的整数次幂在乘法下是一个群
如果将 的两个整数次幂相乘,结果依然是该底数的整数次幂。例如,。这适用于任意底数:
单位元是 ,即 , 的逆元是 。
有限群(Finite groups)
顾名思义,有限群包含的元素数量是有限的。加法下的所有整数集合不是有限的,但模素数的整数加法是一个有限群。
在零知识证明中,我们只使用有限群。
群的阶(Order of a group)
群的阶是指群中元素的数量。
循环群(Cyclic groups)
循环群是这样一种群,它包含一个元素,且群中的每个元素都可以通过对该元素(或其逆元)重复应用二元运算符来“生成”。
循环群的例子
示例 1:由 0 组成的加法群是一个循环群
这是显而易见的,因为 生成了群中的每个元素。
示例 2:模 7 加法是一个循环群
如果我们从 开始,并将 重复与自身相加,我们将生成该群中的每个元素。例如:
示例 3:如果不包含零,模 乘法是一个循环群
在这里选择生成元时我们必须小心,因为例如 就无法生成整个群。
我们可以看到 只能生成 。然而,如果我们选择 作为生成元,那么我们就能生成整个群。
之所以 有效而 无效,是因为 是一个*原根(primitive root)*。
我们可以使用 galois 库来寻找原根:
from galois import GF
GF7 = GF(7)
print(GF7.primitive_elements)
# [3, 5]
从上面的代码输出可以看出, 也能生成所有非零元素。
如果一个群是循环群,那么它就是阿贝尔群
这一点有些微妙,但可以考虑以下推导:
在循环群中,群里的每一个元素都可以生成为 的形式。让我们随意挑选一个元素 。我们将这组加法按如下方式划分:
基于结合律,我们可以添加括号
令 与自身相加 次的结果为 , 与自身相加 次的结果为 。因此,
根据结合律,我们可以如下重新划分原方程(请注意 和 互换了位置!)
我们得到了:
因此,如果群是循环群,那么它必定是阿贝尔群。
请注意,这个命题的逆命题并不成立。实数在加法下是阿贝尔群,但它们不是循环群。
循环群不一定要基于模素数的算术,但在我们讨论零知识证明时,这将是我们使用的唯一一种循环群。
群的单位元是唯一的
一个群不可能有两个单位元。不要把这个问题想得太复杂,它可以通过简单的反证法推导出来。假设 是我们的二元运算符, 是我们的单位元。
假设我们有另一个单位元 。这意味着:
如果我们认为 ,那么以下必定也成立:
但这显然是一个矛盾,因此单位元必定是唯一的。
群在零知识证明中的应用
为了零知识证明而理解群论,更多的是对词汇的熟悉。当我们说到“逆元(inverse)”或“单位元(identity)”时,我们希望你能立即领会它们的含义。
此外,群还能帮助我们在不理解其内部运作原理的情况下,推理极其复杂的数学对象。我们在本文中使用了大家熟悉的例子,但在后续内容中,我们将处理非常陌生的对象,比如基于扩域的椭圆曲线(elliptic curves over field extensions)。即使你不知道那究竟是什么,只要我们告诉你它是一个群,你就已经能对其有相当程度的了解了。
通过 RareSkills 了解更多
本文是零知识证明(ZK proofs)系列文章的一部分。请参阅我们的 ZK Book 获取完整系列。
首发于 2023 年 8 月 1 日