这篇文章深入探讨了群体论,涵盖了从最简单的金属体、半群、单元到群、阿贝尔群以及复杂的环和域等概念,并通过代码提供了验证这些结构的实例。最后,它提到了这些数学概念在类型理论和椭圆曲线密码学中的应用,展示了其在计算机科学和加密技术中的重要性。
2024年6月30日
群论研究集合的代数结构及其元素上的二元运算。
请注意,群论不关注集合元素是什么,或者它们的二元运算符一般来说做什么,它只关心元素与运算符之间的特定关系。我们将主要使用一个小的整数集作为示例,但这可以与类型代数、线性代数、椭圆曲线等相关。
Magma 是最简单的构造,它只是一组配备二元运算符的集合,可以对该集合的元素进行运算。这用以下符号表示。
a,b∈S:a⋆b=c∈S
注意,运算符是一个星号。虽然这通常是一个加法运算符,但群论也对运算符进行了抽象,所以它可以是任何二元运算符。
set_S = { 0, 1, 2, 3, 4 }
add = lambda x, y : (x + y) % 5
def is_magma(op):
for i in set_S:
for j in set_S:
if op(i, j) not in set_S return False
return True
is_magma(add)
## True
我们使用一组从零到四的数字,以及一个加法运算符,当溢出时值会绕回。
半群是一个 magma,它是一个配备二元运算符的集合,但运算符也是结合的。
∀a,b,c∈S:(a⋆b)⋆c=a⋆(b⋆c)
def is_semigroup(op):
for a in set_S:
for b in set_S:
for c in set_S:
if op(op(a, b), c) != op(a, op(b, c)):
return False
return True
is_semigroup(add)
## True
单元是一个半群,包含一个称为“单位”或“恒等”元素的元素。单位元素是一个将二元运算符应用于它和任何其他元素时返回其他元素的元素。
∀a∈S,∃e∈S:a⋆e=e⋆a=a
add_unit = 0
def is_monoid(op):
for a in set_S:
if op(a, add_unit) != a:
return False
return True
is_monoid(add)
## True
对于整数的加法,单位元素是零。
群是一个单元,其中所有元素都有一个唯一的逆,使得运算符应用于任何元素及其逆返回单位元素。
∀a∈S,∃a−1:a⋆a−1=a−1⋆a=e
对于正整数的加法,单位元素的对应负整数以及反之亦然。
def has_inverse(op, a):
for i in set_S:
if add(a, i) == unit:
return True
return False
def is_group(op):
for a in set_S:
if not has_inverse(op, a):
return False
return True
is_group(add)
## True
阿贝尔群是一个群,其中运算符是交换的。
∀a,b∈S:a⋆b=b⋆a
环是一个有两个二元运算的集合。这通常被称为加法和乘法,尽管这些名称也可以被抽象化。从概念上讲,“乘法”运算符可以被视为一个元素对自身的反复应用,加上“加法”运算符。
环的约束是加法运算符必须与集合形成一个阿贝尔群,而乘法运算符必须在集合上形成一个单元并在加法下是分配的。
∀a,b,c∈S:(a+b)+c=a+(b+c)∀a∈S,∃e∈S:a+e=e+a=a∀a∈S,∃a−1∈S:a+a−1=a−1+a=e∀a,b∈S:a+b=b+a∀a,b,c∈S:(a∗b)∗c=a∗(b∗c)∀a∈S,∃e∈S:a∗e=e∗a=a∀a,b,c∈S:a∗(b+c)=a∗b+a∗c
mul = lambda x, y : (x * y) % 5
def is_ring():
is_add_abelian_group = is_semigroup(add) and is_monoid(add)
and is_group(add) and is_abelian_group(add)
is_mul_monoid = is_semigroup(mul) and is_monoid(add)
return is_add_abelian_group and is_mul_monoid
is_ring()
## True
域是一个具有乘法逆的环,有时称为除法,以及加法单位元素和乘法单位元素的约束,有时称为零和一,它们不是同一个元素。
域的一个例子是实数集合,具有加法、乘法、加法逆(即减法)和乘法逆(即除法)。
∀a∈S,∃a−1:a∗a−1=a−1∗a=e0,1∈S:0≠1
如果一个域包含其内部的一个子域,则该域是一个域扩展。更一般地说,如果从域 F 到域 G 的函数将 F 的每个元素映射到 G,则 F 是 G 的子域,而 G 是 F 的域扩展。
一个域扩展的例子是复数集合与其实数子域的关系。
F⊂G
伽罗瓦域是一个具有有限元素的域。一个常见的伽罗瓦域的例子是模素数的整数集合。
请注意,本文中所有代码示例中的 set_S 实际上形成了一个伽罗瓦域,因为它是模数5的整数集合,加法是结合的,具有单位元素,具有逆,并且是可交换的,而乘法是结合的,具有单位元素,在加法下是分配的,具有逆,且零不等于一。
关于伽罗瓦域的一个有趣的说明是,当元素是整数时,模数必须是一个素数。这是因为如果集合包含两个元素,当它们相乘时会产生模数,结果是零。如果非零乘法的结果为零,它开始破坏公理,这意味着它将不再是一个域。
虽然这并没有涵盖几乎所有的群论,但这旨在提供对群和抽象代数重要概念的概述。
单元是类别理论的重要组成部分,尤其是臭名昭著的单子,作为“在自函子范畴中的单元”。
加法、乘法及其关系的概念可以在类型理论中表示。此外,临时多态(即运算符重载)在群论概念上创造了语法糖。无论元素是伽罗瓦域上的整数、向量空间的向量还是复数,如果给定类型的加法和乘法的期望公理得到满足,我们可以重写这些运算符的行为并对基础功能进行黑盒处理。
这对椭圆曲线密码学也有重要意义。椭圆曲线配对依赖于处理笛卡尔积和域扩展的双线性映射。在为零知识证明编写领域特定语言时,通常使用“域元素”或素数伽罗瓦域的元素进行计算。
下次再见。
- 原文链接: jtriley.substack.com/p/g...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!