属于与不属于:元素和集合的关系
集合(set)是若干互不相同、无先后次序的对象合成的整体,这些对象叫它的元素。关于集合,最基本的问句只有一个:某个对象 在不在集合 里。在,记 ,读作 属于 ;不在,记 。本页从这条唯一的判据出发,末节转向没有任何元素的空集。
1 · 外延性与成员关系
集合由「哪些对象在里面」完全确定,这条约定叫外延性(extensionality):两个集合相等,当且仅当它们含有相同的元素。它有两个直接推论。其一是无序—— 与 的成员关系逐个对象一致,故是同一个集合。其二是互异——写两遍不增加成员, 与 相等。
于是刻画一个集合,等价于对每个候选对象回答一句「属于还是不属于」。这也解释了为什么集合没有「第 3 个元素」这种说法:次序不在定义里,要谈次序得另造结构,例如有序对与笛卡尔积。
「互异」这一条落到代码里就不再是自明的:它依赖一个判定「两个对象是否同一个」的相等谓词,而这个谓词的选择会改变集合的成员。JavaScript 的 Set 用的是 SameValueZero,它与两个常见谓词都不一致:new Set([NaN, NaN]).size 是 1,尽管 NaN === NaN 为假;new Set([0, -0]).size
也是 1,尽管 Object.is(0, -0) 为假,且取出来的那个元素是 0(实测于 node v26.6.0)。数学上的互异性把相等当作给定的,实现里它是一个要挑的参数。
2 · 空集
把成员逐个去掉,直到一个不剩,得到的集合叫空集,记作 。它的定义性质是一条否定:对任何对象 都有 ,故 。
空集是唯一的,这是外延性的推论:设 与 都没有元素,则「」与「」对每个 同为假,成员关系一致,故两者相等。所以不存在「两个不同的空集」,只有一个。
警示 · 与 不是同一个集合,混淆这两者是本页最常见的错答。 没有元素,; 有一个元素,那个元素恰好是 ,故 。二者的成员关系不同: 为真,而 为假。同样要分开的是 与 : 与 都成立,但成立的理由无关(见相等、子集与不相交)。幂集那一页会再遇到这个区别:,一个空集的幂集有一个元素而非零个。
3 · 参考文献
- Set (mathematics). Wikipedia. 集合、元素与成员关系的基本约定。https://en.wikipedia.org/wiki/Set_(mathematics)
- Axiom of extensionality. Wikipedia. 外延性公理,以及集合由成员唯一确定这一结论。https://en.wikipedia.org/wiki/Axiom_of_extensionality
- Empty set. Wikipedia. 空集的性质与它的唯一性。https://en.wikipedia.org/wiki/Empty_set
- SameValueZero. ECMA-262.
Set与Map判定键相同所用的相等谓词。https://tc39.es/ecma262/#sec-samevaluezero