【集合论】 01 - 集合还要论?

  "不就是集合吗?高中就学过了。小样,别以为加个“论”字我就不认识你!"在我们的印象中,集合一直是数学的基础语言,任何一个分支都是由集合定义起的。殊不知,这一状况其实才几十年时间,集合论(Set Theory)的诞生也才一百年左右。你可能更没想到,集合论起始于对无穷的探索和思考,它还掀起了崭新的学科“数学基础”的建立。

  集合和逻辑横跨于数学与哲学之间,但它们却如其它枝繁叶茂的应用分支一样,已经生成了错综复杂的根系,使得数学更加丰富,也更加稳固。作为一个小小程序员,我无力也无心去细致学习这个庞大而“无用”的学科。但鉴于其在数学上的地位和思想的重要性,我还是走马观花似得了解了它最简单的概念(不一定是最基本的),从中可以体验到近代数学的精神,建立科学的“数学观”。

  但我们的故事却不能从集合论的诞生说起,而是要回到2000多年前的古希腊,那个数学华丽登场的年代。数学在古希腊超前的繁荣,毕达哥拉斯(Pythagoras)学派的信条“万物皆数”充分表达了人们对数的敬仰。但那时的数仅仅指一般的整数,人们对无理数或涉及无穷的概念,一直都避而远之。著名的芝诺悖论(Zeno‘s Paradox)不仅表现出当时人们对无穷的含糊认识,同时也引发了对无穷长达2000多年的思考。阿基米德(Archimedes)在刻意回避无穷的情况下完成了初等的积分计算,将穷竭法发挥到了极致,但却无缘微积分的发现。牛顿(Newton)、欧拉(Euler)所处的17、18世纪有意地忽视无穷,促成了分析学的飞速发展和广泛应用,但随之人们的困扰也在增加。争论的焦点在于:无穷究竟是潜在的还是实在的,这个问题的答案也正是实数和极限概念所必需的。威尔斯特拉斯(Weierstrass)领导的分析严格化以极限形式定义了无穷小量,使得人们开始正视无穷。到了近代,人们才渐渐意识到:数学概念不一定是要可构造的,它还可以被创造,所以无穷也是可以被创造和定义的,一场公理化(Axiomatization)的风暴即将拉开序幕。

  一切历史事件看起来是那样的必然,但最初却产生于偶然,我们的主人翁也是这样出场的。康托尔(Cantor)当时在研究三角函数展开的唯一性,研究的深入使他意识到了严格定义无理数的必要性,并由此转向了集合理论的构建。任何新思想的提出都会遭受同时代人的抵制,康托尔的恩师克罗尼克(Kronecker)也站在了集合论的对立面,再加上一些问题迟迟得不到证明,康托尔严重抑郁以致精神失常,最后凄惨地死于精神病院。但他却给数学带来了一场革命,那句“数学的本质在于它的自由”任然在激励着后人不断前行。

Cantor(1845 - 1918)

  康托尔掀起的风暴变得越发猛烈,后继者们纷纷投入到这股漩涡中,趁着公理化大潮,这股洪流并入了“数学基础”的大洋之中,并成为其中最强有力的源头。公理化运动为集合论扫清了含糊的概念,使之成为一个经典的数学模型。而“数学基础”继续对逻辑和证明本身进行探讨,以挖地三丈的气势为数学寻求根基,甚至很多分支已经深入到了哲学的地界。“数学基础”的大洋里星光闪耀:罗素、策梅洛、冯·诺依曼、哥德尔、柯恩......,"数学基础"的成果也越发成熟:元数学、范畴轮、力迫法、大基数......。

  至此,我们知道集合论已远非我们认识的样子,也远非一个程序员能触碰的。区区几段描述,连故事梗概都谈不上,有兴趣的可以到任何一本数学史中看到那浓墨重彩的一笔。再次重申,这里只是集合论里最简单的概念,它是“数学基础”的九牛之一毛,我只因无法忽视这座高峰的存在,抬头仰望了一眼而已。



前序学科:数理逻辑

参考资料:

[1] 《Set Theory(3rd)》,Thomas Jech,2006

  这本大部头的专业著作涵盖了集合论的绝大部分内容,依然成为集合论的标准参考书,但不适合做入门书。

[2] 《Roads to Infinity: The Mathematics of Truth and Proof》,John Stillwell,2010

  原本是个科普书,但在这位史学家笔下有了更多的专业性,既有趣又严谨,可以作为入门书。

[3] 《基础集合论》,董延闿,1988

  讲解公理集合论基础,但不拘泥于公理形式。语言简练清晰,证明详尽,内容安排合理,国内集合论入门首选。

[4] 《选择公理》,赵希顺,2003

  从选择公理的历史和原理讲起,进而深入到专业的内容,开头部分可作为很好的科普读物,后面的可作为专业参考书。

[5] 《无穷之旅:关于无穷大的文化史》(To Infinity and Beyond: A Cultural History of the Infinite),Eli Maor,1991

  从不同角度和学科讲述无穷的概念,包括数字、几何、美学和宇宙。题材丰富,内容浅显易懂,休闲读物一本。

时间: 2024-08-27 16:54:47

【集合论】 01 - 集合还要论?的相关文章

[Java系列01]集合

Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型. 简化图: 集合接口:6个接口(点线框表示),表示不同集合类型,是集合框架的基础. 抽象类:5个抽象类(虚线框表示),对集合接口的部分实现.可扩展为自定义集合类. 实现类:8个实现类(实线框表示),对接口的具体实现. 带有空心箭头的点线表示一个特定类实现了一个接口,实心箭头表示某个类可以生成箭头所指向的类的对象. 在很大程度上,一旦您理解了接口,您就理解了框架.虽然您总要创建接口特定

Java集合系列:-----------01集合的整体框架

内容来自:http://www.cnblogs.com/skywang12345/p/3308498.html Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collections)..Java集合工具包框架图(如下): 大致说明: 看上面的框架图,先抓住

【博客目录】

这里是个人的学习笔记,主要目标是数学和算法.内容比较紧凑,仅供学习交流使用,并无意展开为详细教程. 因为有大量的数学公式,建议使用Chrome浏览器,公式上右键可设置放大的方法(比如单击放大). 数学_代数 [集合论] 01 - 集合还要论? 02 - 集合与自然数 03 - 序集和序数 [初等数论] 01 - 数学的皇后 02 - 整除与公约数 03 - 同余和剩余系 04 - 同余方程 05 - 指数和原根 06 - 不定方程 数学_分析 [实数系统] 01 - 万物皆数 02 - 实数构造

JAVA集合框架

收藏 查看我的收藏 146有用+1 56 编辑 Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台.动态的Web.Internet计算.从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet.集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何集合框架都包含三大块内容:对外的接口.接口的实

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

集合运算

问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行为一个整数m,表示集合B中的元素个数. 第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素. 集合中的所有元素均为int范围内的整数,n.m<=1000. 输出格式 第一行按从小到大的顺序输出A.B交集中的所有元素. 第二行按从小到大的顺序输出A.B并集中的所有元素. 第三行按从小到大的顺序

OC中的集合NSSet

1 集合NSSet(无序) 2 本质上是哈希表,采用散列算法来查找 3 每个元素只有一次,元素是无序的 4 5 创建 每个元素可以是任意的对象 6 NSSet *set=[[NSSet alloc] initWithObjects:@"one",@"two", 7 @"three",@"four",nil]; 8 NSSet *set2=[[NSSet alloc] initWithObjects:@"one&quo

list集合练习一

package com.java.c.domain; public class Person { private String name; private int age; public Person() {  super(); } public Person(String name, int age) {  super();  this.name = name;  this.age = age; } public String getName() {  return name; } publi

java容器---集合总结

思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定尺寸的,你必须事先知道你要需要多少个对象.但是在一般的情况中,你在写程序中并不知道将需要多少个对象,或者是否需要更加复杂的方式来存储对象,因此数组尺寸固定很不爽! 为了解决上述问题,引入了容器的概念.容器提供了完善的方法来保存对象,你可以使用这些工具来解决数量惊人的问题.Java容器类可以自动调整自