数学 / 集合论 · 从 ∈ 到映射与量词 / 属于与不属于:元素和集合的关系 待审核 1 / 11
成员关系 ·     \in \; \notin \; \emptyset

属于与不属于:元素和集合的关系

集合(set)是若干互不相同、无先后次序的对象合成的整体,这些对象叫它的元素。关于集合,最基本的问句只有一个:某个对象 xx 在不在集合 AA 里。在,记 xAx \in A,读作 xx 属于 AA;不在,记 xAx \notin A。本页从这条唯一的判据出发,末节转向没有任何元素的空集。

1 · 外延性与成员关系

membership · xAx \in A / xAx \notin A

集合由「哪些对象在里面」完全确定,这条约定叫外延性(extensionality):两个集合相等,当且仅当它们含有相同的元素。它有两个直接推论。其一是无序——{1,2,3}\{1, 2, 3\}{3,1,2}\{3, 1, 2\} 的成员关系逐个对象一致,故是同一个集合。其二是互异——写两遍不增加成员,{1,1,2}\{1, 1, 2\}{1,2}\{1, 2\} 相等。

于是刻画一个集合,等价于对每个候选对象回答一句「属于还是不属于」。这也解释了为什么集合没有「第 3 个元素」这种说法:次序不在定义里,要谈次序得另造结构,例如有序对与笛卡尔积

图 1-1 · 元素与集合的属于关系判定。可改集合的成员与待测对象,观察 \in\notin 的判定,以及重复输入如何被并成一个。

「互异」这一条落到代码里就不再是自明的:它依赖一个判定「两个对象是否同一个」的相等谓词,而这个谓词的选择会改变集合的成员。JavaScript 的 Set 用的是 SameValueZero,它与两个常见谓词都不一致:new Set([NaN, NaN]).size1,尽管 NaN === NaN 为假;new Set([0, -0]).size 也是 1,尽管 Object.is(0, -0) 为假,且取出来的那个元素是 0(实测于 node v26.6.0)。数学上的互异性把相等当作给定的,实现里它是一个要挑的参数。

2 · 空集 \emptyset

empty set · \emptyset · xx \notin \emptyset

把成员逐个去掉,直到一个不剩,得到的集合叫空集,记作 \emptyset。它的定义性质是一条否定:对任何对象 xx 都有 xx \notin \emptyset,故 =0|\emptyset| = 0

空集是唯一的,这是外延性的推论:设 1\emptyset_12\emptyset_2 都没有元素,则「x1x \in \emptyset_1」与「x2x \in \emptyset_2」对每个 xx 同为假,成员关系一致,故两者相等。所以不存在「两个不同的空集」,只有一个。

图 2-1 · 空集的性质:对任何对象判定恒为不属于,且它是任何集合的子集。

警示 · \emptyset{}\{\emptyset\} 不是同一个集合,混淆这两者是本页最常见的错答。\emptyset 没有元素,=0|\emptyset| = 0{}\{\emptyset\} 有一个元素,那个元素恰好是 \emptyset,故 {}=1|\{\emptyset\}| = 1。二者的成员关系不同:{}\emptyset \in \{\emptyset\} 为真,而 \emptyset \in \emptyset 为假。同样要分开的是 \in\subseteq{}\emptyset \subseteq \{\emptyset\}{}\emptyset \in \{\emptyset\} 都成立,但成立的理由无关(见相等、子集与不相交)。幂集那一页会再遇到这个区别:P()={}P(\emptyset) = \{\emptyset\},一个空集的幂集有一个元素而非零个。

3 · 参考文献

  1. Set (mathematics). Wikipedia. 集合、元素与成员关系的基本约定。https://en.wikipedia.org/wiki/Set_(mathematics)
  2. Axiom of extensionality. Wikipedia. 外延性公理,以及集合由成员唯一确定这一结论。https://en.wikipedia.org/wiki/Axiom_of_extensionality
  3. Empty set. Wikipedia. 空集的性质与它的唯一性。https://en.wikipedia.org/wiki/Empty_set
  4. SameValueZero. ECMA-262. SetMap 判定键相同所用的相等谓词。https://tc39.es/ecma262/#sec-samevaluezero