为什么又来一篇集合论教程?
本文的目标读者是那种除非看到直接的用例,否则不关心抽象数学的人。他们想要获取所需的精华部分,然后继续前进。本文正是迎合这部分读者的需求。
我们的最终目标是理解抽象代数,因为抽象代数中有很多完全称得上“有用”的概念,但抽象代数严重依赖于集合论。
我们在这里的目标是走一条从集合论到抽象代数的最直接路径,以便我们能理解将要处理的所有术语和概念。
工程师通常对收集抽象概念或证明定理不感兴趣,他们想要交付产品,同时对主题有足够深入的理解,以免在无意中制造 bug 或导致效率低下。获取那些对这一追求没有直接帮助的知识被视为浪费时间。
为了针对这一目标进行优化,我刻意省略了集合论中对理解抽象代数相关方面没有直接用处的任何内容。因此,这份关于集合论的资料在设计上就不是大而全的。
本教程的目的是让你牢牢掌握在集合论语境下什么是 二元运算符 ( binary operator )。
二元运算符的概念是 Group Theory 的核心,而群论在零知识证明中 无处不在 。
些许数学家可能会对我在这里不讨论集合论的公理感到震惊。这是特性(feature),不是缺陷(bug)。如果你想要某样东西的证明,去问 Google 或聊天机器人(或者更好的是,你自己推导出来)。这里讨论的概念在一个多世纪以来已经被严谨地证明得彻头彻尾了。
集合论并不困难(至少如果你跳过编写证明的话,初次进行集合论证明可能会异常困难)。你可能已经在直觉上理解了集合论,并且几乎肯定在代码中使用过集合,也许是为了快速消除数组中的重复项。然而,我们需要用语言来表达这种直觉,并将我们直观的理解明确化。
学习抽象数学就像学习人类语言。你可以学习词汇(单词指代什么)和语法(它们如何以有效的方式组合在一起)。用这个比喻来说,我们将重点放在词汇而不是语法上。这有充分的理由。
如果你走进外国的一家商店,问出类似于“面包要给我买在哪里?”这样的话,即使你的语法错得离谱,店员也能帮助你。但是如果你精通语法却不懂词汇,你的知识就会变得毫无用处。你可以组织一个完美的句子,但如果你不能简明扼要地说出“面包”和“买”,你的商店之旅就不会成功(我并没有发明这个比喻,可惜我不记得第一次是在哪里看到的了)。
因此,我们几乎不会触及语法(证明和定理),而是强调抽象数学的词汇(这对于在这个异国他乡游刃有余非常有用)。
某些类型的知识只能通过经验获取,而不能通过解释来获得。
因此,你 应该 完成本文中的练习。别担心,你不需要写证明,只是为了确保你真正内化了刚刚阅读的内容。
不要被本文相对简短的篇幅所欺骗。如果你真的去做了那些练习,至少需要花一个下午(或者两三个下午)才能学完。如果某个部分让你感到困惑,请查阅互联网或询问聊天机器人,寻找该子主题的替代解释。
集合(set)是被明确定义的对象的聚集。这些对象可以是 任何东西 ,而我们从集合论中学到的规则都适用于它们。