← 返回查找結果

集合隸屬:x∈A 是命題,並與 ⊆、= 及程式的成員測試區分

本頁導覽
  1. 目標與範圍
  2. 已知條件與符號
  3. 規則與來源
  4. 逐步主鏈
  5. 局部子步與引理
  6. 逐步反向審查
  7. 錯誤控制與反例
  8. 結論與限制
  9. 驗證及來源綁定

← 導讀目錄 · 原始 MKO

derivation-mko-set-membership-01 · production-20261019-adopted-96

目標與範圍

在型別化語境中,設 A={1,2,3}、B={1,2}、𝓕={{1,2},{3}}(元素是整數集合的集合)、E={n∈ℤ ∣ 2∣n}。判定下列命題的真假並給出理由:2∈A;4∈A;B⊆A;A⊆B;B∈𝓕;{1}∈𝓕;1000000∈E;7∈E。並說明 1∈B 與 B∈𝓕 為何不給出 1∈𝓕,以及程式語言的成員測試為何不能取代集合隸屬的語義。

依 MKO:給定集合 A 與對象 x,x∈A 是一個命題,表示 x 是 A 的元素。在型別化語境中處理整數的集合與整數集合的集合,只用列舉式與建構式集合。不建立集合論公理,不展開 Lean 映射的細節(MKO 第三段只作說明);不改動 canonical MKO 或英文 edition。

已知條件與符號

  • subset_def
  • set_extensionality
  • set_builder
  • divides_def
  • order_basics
  • numeric_evaluation
  • G1 — 型別化語境:對象是整數;A、B、E 是整數的集合;𝓕 是整數集合的集合。x∈S 只在 x 的型別與 S 的元素型別相同時才是良構命題。列舉記號:x∈{a,b,c} ⇔ x=a ∨ x=b ∨ x=c(兩個或一個元素時同理);對集合的列舉同樣適用,此時等號是集合相等。
  • G2 — A={1,2,3},B={1,2},𝓕={{1,2},{3}},E={n∈ℤ ∣ 2∣n}。
  • x\in A — x 是 A 的元素(一個命題)
  • B\subseteq A — B 的每個元素都是 A 的元素
  • \mathcal{F} — 元素是整數集合的集合
  • E=\{n\in\mathbb{Z}\mid 2\mid n\} — 以條件給出的偶數集合
  • \{1\} — 只含 1 的集合

規則與來源

  • subset_def · prerequisite — 子集:A⊆B 表示 A 的每個元素都是 B 的元素,即 ∀x (x∈A⇒x∈B)。
  • set_extensionality · prerequisite — 集合相等:A=B 當且僅當 A⊆B 且 B⊆A,即兩者有相同元素。
  • set_builder · prerequisite — 集合建構式:x∈{y∈A ∣ P(y)} 當且僅當 x∈A 且 P(x)。
  • divides_def · prerequisite — 整除:對整數 a、b,a∣b 表示存在整數 k 使 b=ak。
  • order_basics · prerequisite — 實數的序:任兩數恰有 u<v、u=v、u>v 之一;u<v 且 v<w 推出 u<w;u<v 推出 u+w<v+w;u<v 且 w>0 推出 uw<vw;u<v 且 w<0 推出 uw>vw。
  • numeric_evaluation · prerequisite — 明確整數或有理數算式的精確求值;可以獨立重算。
  • eq_refl_symm_trans · prerequisite — 等號的性質:u=u;若 u=v 則 v=u;若 u=v 且 v=w 則 u=w。
  • de_morgan_logic · prerequisite — 邏輯的德摩根律:¬(P∧Q) ⇔ ¬P∨¬Q;¬(P∨Q) ⇔ ¬P∧¬Q。
  • def_unfold · prerequisite — 展開定義:把一個已定義的詞換成它的定義內容(或反向收回),命題的真假不變。
  • case_analysis · prerequisite — 分情況論證:若 P∨Q 成立,且 P⇒R、Q⇒R 都已證,則 R 成立。所有情況必須涵蓋全部可能。
  • imp_intro · prerequisite — →引入(釋放假設):若在暫時假設 P 的作用域中推出 Q,則得到 P⇒Q;此後 P 不再可當作已知使用。
  • eq_replace · prerequisite — 等值代換:命題中的一個式子可換成與它相等的式子,命題的真假不變。
  • forall_intro · prerequisite — ∀引入(全稱推廣):若某命題對一個「任意的」元素 x 證成,而證明沒有對 x 加任何額外假設,則它對論域中所有 x 成立。
  • quantifier_negation · prerequisite — 量詞否定:¬(∀x, P(x)) 等價於 ∃x, ¬P(x);¬(∃x, P(x)) 等價於 ∀x, ¬P(x)。
  • exists_intro · prerequisite — ∃引入:若找到 a∈D 使 P(a) 成立,則 ∃x∈D, P(x)。
  • two_nonzero · prerequisite — 實數中 0<1,故 0<1+1=2,所以 2≠0。
  • and_intro_elim · prerequisite — 合取:由 P 與 Q 得 P∧Q;由 P∧Q 可分別得 P 與 Q。
  • mko_member · cited — 給定集合 A 與對象 x,x∈A 是一個命題,表示 x 是 A 的元素。 · mko-set-membership
  • list_set · prerequisite — 列舉式集合:x∈{a,b,c} ⇔ x=a ∨ x=b ∨ x=c;兩個或一個元素時同理。
  • typed_membership · prerequisite — 型別化的隸屬:x∈S 只在 x 的型別是 S 的元素型別時才是良構命題;整數不是整數的集合,整數的集合也不是整數。
  • int_no_gap · prerequisite — 整數沒有空隙:對整數 k 與 m,必有 k≤m 或 k≥m+1。
  • python_in · cited — 對字串型別,x in y 為 True 當且僅當 x 是 y 的子字串;因此 '12' in '123' 的值為 True。 · Python Software Foundation, Python Language Reference, Section 6.10.2 Membership test operations

逐步主鏈

S01 · definition

操作前

x,\ A

操作後

x\in A\ \text{is a proposition: }x\ \text{is an element of}\ A

條件:無

規則:mko_member · 依賴:G1, G2

葉節點依據:mko_member + list_set

依 MKO,給定集合 A 與對象 x,x∈A 是一個命題:它斷言 x 是 A 的元素,可能為真也可能為假。它不表示 x 等於 A,也不表示 x 是 A 的子集合。MKO 也記錄:在目前的 Lean 映射中,Set α 表示為 α→Prop,所以 x∈A 與「A x」在定義上等價;也就是說,集合由「對每個 x 給出一個命題」決定。本稿不執行 Lean,只採用這個觀點。

S02 · implies

操作前

2\in A

操作後

2=1\lor 2=2\lor 2=3:\ \text{true, since}\ 2=2

條件:無

規則:list_set · 依賴:S01, G2, list_set

葉節點依據:list_set + eq_refl_symm_trans

依列舉記號,2∈A ⇔ 2=1 ∨ 2=2 ∨ 2=3。第二支 2=2 依等號的反身性成立,所以析取為真,2∈A 為真。

S03 · implies

操作前

4\in A

操作後

4\neq 1\land 4\neq 2\land 4\neq 3,\ \text{so}\ 4\notin A

條件:無

規則:de_morgan_logic · 依賴:G2, list_set

葉節點依據:de_morgan_logic + list_set + numeric_evaluation

依列舉記號 4∈A ⇔ 4=1 ∨ 4=2 ∨ 4=3。三個等式都不成立,依德摩根律 ¬(4=1∨4=2∨4=3) ⇔ 4≠1∧4≠2∧4≠3,所以 4∉A。「4∈A」仍是一個命題,只是假的。

S04 · equivalent

操作前

B\subseteq A

操作後

\forall x\,(x\in B\Rightarrow x\in A)

條件:無

規則:subset_def · 依賴:G2

葉節點依據:subset_def + def_unfold

依子集定義展開:B⊆A 表示 B 的每個元素都是 A 的元素。注意 ⊆ 談的是 B 的元素,∈ 談的是單一對象。

S05 · case_split

操作前

x\in B\ (x\ \text{arbitrary})

操作後

x=1\ \lor\ x=2

條件:無

規則:list_set · 依賴:S04, G2, list_set

葉節點依據:list_set + case_analysis

任取整數 x 並暫時假設 x∈B。依列舉記號 x=1 或 x=2,兩支涵蓋 x∈B 的所有可能,在 S05.1、S05.2 處理。

S06 · implies

操作前

x\in B\Rightarrow x\in A\ \text{for arbitrary}\ x

操作後

B\subseteq A

條件:無

規則:forall_intro · 依賴:S04, S05, S05.1, S05.2

葉節點依據:case_analysis + imp_intro + forall_intro

兩支都推出 x∈A,依分情況論證,在假設 x∈B 下得 x∈A;釋放假設得 x∈B ⇒ x∈A。x 是任取的,依全稱推廣與 S04,B⊆A。

S07 · implies

操作前

3\in A,\ 3\notin B

操作後

A\not\subseteq B

條件:無

規則:quantifier_negation · 依賴:G2, list_set

葉節點依據:quantifier_negation + exists_intro + list_set + numeric_evaluation

3∈A(第三支 3=3);3∈B ⇔ 3=1 ∨ 3=2,兩者都不成立,所以 3∉B。於是 ∃x (x∈A ∧ x∉B),依量詞否定 ¬∀x (x∈A ⇒ x∈B),即 A⊄B。⊆ 不是對稱的。

S08 · implies

操作前

B\in\mathcal{F}

操作後

B=\{1,2\}\lor B=\{3\}:\ \text{true}

條件:無

規則:list_set · 依賴:G1, G2, list_set

葉節點依據:list_set + typed_membership + eq_refl_symm_trans

𝓕 的元素是整數的集合,B 也是整數的集合,所以 B∈𝓕 是良構命題。依列舉記號,B∈𝓕 ⇔ B={1,2} ∨ B={3};B 就是 {1,2}(等號的反身性),所以 B∈𝓕 為真。這是 B 作為一個整體是 𝓕 的元素,與 B⊆A(B 的每個元素都在 A 中)是不同的關係。

S09 · implies

操作前

\{1\}\in\mathcal{F}

操作後

\{1\}\neq\{1,2\},\ \{1\}\neq\{3\},\ \text{so}\ \{1\}\notin\mathcal{F}

條件:無

規則:set_extensionality · 依賴:G2, list_set, set_extensionality

葉節點依據:set_extensionality + list_set + de_morgan_logic + numeric_evaluation

{1}∈𝓕 ⇔ {1}={1,2} ∨ {1}={3}。2∈{1,2} 而 2∉{1}(2≠1),依外延性 {1}≠{1,2};1∈{1} 而 1∉{3}(1≠3),所以 {1}≠{3}。兩支都假,{1}∉𝓕。可是 {1}⊆B 而且 B∈𝓕:隸屬於 𝓕 不會傳給子集合。

S10 · implies

操作前

1\in B,\ B\in\mathcal{F}

操作後

1\in\mathcal{F}\ \text{is not a true statement}

條件:無

規則:typed_membership · 依賴:S08, G1, typed_membership

葉節點依據:typed_membership

1∈B 為真(第一支 1=1),B∈𝓕 為真(S08)。但 𝓕 的元素是整數的集合,1 是整數,依 typed_membership,「1∈𝓕」在型別化的讀法中不是良構命題,更不是真命題;若改用不分型別的讀法,它表示 1={1,2} 或 1={3},在把整數與這兩個集合視為不同對象時也不成立。所以 ∈ 沒有傳遞性:x∈B 與 B∈𝓕 不推出 x∈𝓕。

S11 · implies

操作前

1000000\in E

操作後

1000000=2\cdot 500000,\ \text{so}\ 1000000\in E

條件:無

規則:set_builder · 依賴:G2, set_builder, divides_def

葉節點依據:set_builder + divides_def + exists_intro + numeric_evaluation

依建構式,1000000∈E ⇔ 1000000∈ℤ 且 2∣1000000。1000000=2·500000,500000 是整數,所以 2∣1000000,1000000∈E 為真。這個判定只用 E 的定義條件,不需要把 E 的元素列出或存放在任何容器裡。

S12 · case_split

操作前

k\in\mathbb{Z}\ \text{with}\ 2k=7\ ?

操作後

k\le 3\ \lor\ k\ge 4

條件:k\in\mathbb{Z}

規則:int_no_gap · 依賴:G2

葉節點依據:int_no_gap + case_analysis

7∈E 需要 2∣7,即整數 k 使 7=2k。依 int_no_gap(m=3),每個整數 k 滿足 k≤3 或 k≥4,兩支在 S12.1、S12.2 處理。

S13 · implies

操作前

\forall k\in\mathbb{Z}:\ 2k\neq 7

操作後

7\notin E

條件:無

規則:case_analysis · 依賴:S12, S12.1, S12.2, G2, set_builder

葉節點依據:case_analysis + set_builder + divides_def

兩支都得 2k≠7,所以沒有整數 k 使 7=2k,即 2∤7;依建構式 7∈E ⇔ 2∣7,因此 7∉E。「7∈E」是一個假的命題。

S14 · implies

操作前

\text{Python: }'12'\ \text{in}\ '123'

操作後

\text{True (substring test), while}\ '12'\notin\{'1','2','3'\}

條件:無

規則:python_in · 依賴:python_in, list_set

葉節點依據:python_in + list_set

依引用的 Python 語言參考(python_in),對字串而言 x in y 是子字串測試,所以 '12' in '123' 為 True。若把 '123' 的三個字元看成由單字元字串組成的集合 {'1','2','3'},則 '12'∈{'1','2','3'} ⇔ '12'='1' ∨ '12'='2' ∨ '12'='3';'12' 有兩個字元,與三個單字元字串都不相等,所以這是假命題。同一個「in」在程式中檢查的是另一種關係;MKO 提醒不要把程式容器的成員測試當作集合隸屬的全部語義。

S15 · implies

操作前

\text{verdicts of S02 to S14}

操作後

2\in A,\ 4\notin A,\ B\subseteq A,\ A\not\subseteq B,\ B\in\mathcal{F},\ \{1\}\notin\mathcal{F},\ 1000000\in E,\ 7\notin E

條件:無

規則:and_intro_elim · 依賴:S02, S03, S06, S07, S08, S09, S10, S11, S13, S14

葉節點依據:and_intro_elim

合起來:2∈A 真、4∈A 假、B⊆A 真、A⊆B 假、B∈𝓕 真、{1}∈𝓕 假、1000000∈E 真、7∈E 假;1∈B 與 B∈𝓕 不給出 1∈𝓕;程式的字串成員測試與集合隸屬是不同關係。

局部子步與引理

S05.1 · implies

操作前

x=1

操作後

x\in A\ \ (1=1)

條件:無

規則:list_set · 依賴:S05, list_set

葉節點依據:list_set + eq_replace

若 x=1,則 x∈A ⇔ 1=1 ∨ 1=2 ∨ 1=3,第一支成立,所以 x∈A。

S05.2 · implies

操作前

x=2

操作後

x\in A\ \ (2=2)

條件:無

規則:list_set · 依賴:S05, list_set

葉節點依據:list_set + eq_replace

若 x=2,依 S02,x∈A。

S12.1 · implies

操作前

k\le 3

操作後

2k\le 6<7,\ \text{so}\ 2k\neq 7

條件:2>0

規則:order_basics · 依賴:S12

葉節點依據:order_basics + numeric_evaluation

若 k<3,乘以正數 2 得 2k<6;若 k=3,2k=6。所以 2k≤6<7,2k≠7。

S12.2 · implies

操作前

k\ge 4

操作後

2k\ge 8>7,\ \text{so}\ 2k\neq 7

條件:2>0

規則:order_basics · 依賴:S12

葉節點依據:order_basics + numeric_evaluation

若 k>4,乘以 2 得 2k>8;若 k=4,2k=8。所以 2k≥8>7,2k≠7。

逐步反向審查

  • S15 · sufficient_goal_reduction · S02, S03, S06, S07, S08, S09, S10, S11, S13, S14, and_intro_elim — 目標 G:題目要求的各項判定與說明。足夠條件 H:所列各步結論;H⇒G 只是並列。H 由 G1、G2 與引用規則正向證成,沒有把 G 當作前提。
  • S14 · premise_audit · python_in, list_set — 程式行為來自引用的語言參考(citation_verified,本稿沒有執行程式);集合一側只用列舉記號。不宣稱所有程式語言或所有容器型別都如此。
  • S13 · premise_audit · S12, case_analysis, set_builder, divides_def — 需要兩支涵蓋全部整數(S12)。
  • S12.2 · premise_audit · order_basics — 同 S12.1。
  • S12.1 · premise_audit · order_basics, two_nonzero — 用到 2>0;不宣稱反向。
  • S12 · premise_audit · int_no_gap — 兩支涵蓋全部整數。
  • S11 · premise_audit · set_builder, divides_def, exists_intro, numeric_evaluation — 需要一個整數見證 500000(N8)。
  • S10 · premise_audit · typed_membership, S08 — 結論依賴型別區分;不分型別時的判定另需數的編碼,本稿不處理。
  • S09 · premise_audit · set_extensionality, list_set, de_morgan_logic — 每個集合不等式各需一個只屬於一邊的元素;兩支都否定後析取為假。
  • S08 · premise_audit · list_set, typed_membership, eq_refl_symm_trans — 需要型別相符(B 是整數集合)與一支為真。
  • S07 · premise_audit · list_set, quantifier_negation, exists_intro — 一個反例就足以否定子集關係。
  • S06 · sufficient_goal_reduction · S04, S05, case_analysis, imp_intro, forall_intro — 目標 G:B⊆A。足夠條件 H:∀x (x∈B⇒x∈A);H⇒G 由 S04。H 由 S05 及其子步正向證成。
  • S05.2 · premise_audit · list_set, S02, eq_replace — 直接引用 S02。
  • S05.1 · premise_audit · list_set, eq_replace — 用 x=1 代換後只需一支為真。
  • S05 · premise_audit · list_set, imp_intro — 列舉記號給出完整的分支;暫時假設在 S06 釋放。
  • S04 · inverse_equivalence · subset_def — 展開與收回定義是雙向的。
  • S03 · premise_audit · list_set, de_morgan_logic, numeric_evaluation — 要否定析取,必須每一支都不成立(N1 到 N3)。
  • S02 · premise_audit · list_set, eq_refl_symm_trans — 析取只需一支為真。
  • S01 · premise_audit · G1, G2, mko_member — 此步只寫出定義與型別,不推出新事實。

錯誤控制與反例

隸屬與子集合是兩種關係

MKO 指出常見誤解是混淆 x∈A 與 B⊆A。本稿中 B⊆A(S06)但 B 不是 A 的元素;B∈𝓕(S08)而 {1}⊆B,{1} 卻不是 𝓕 的元素(S09);1∈B、B∈𝓕 也不推出 1∈𝓕(S10)。∈ 連接一個對象與一個集合,⊆ 連接兩個同型別的集合,兩者的推理規則不同。

程式的成員測試不是集合語義

MKO 的另一個誤解是把程式容器的成員測試當作所有集合論語義。依引用的 Python 參考,字串的 in 是子字串測試,'12' in '123' 為 True,但作為集合 '12'∈{'1','2','3'} 為假(S14)。用程式核對集合命題前,必須先確認該運算子的語義與 ∈ 一致。

x∈A 是命題,可以為假

4∈A 與 7∈E 都是假的命題(S03、S13),它們仍是命題。E 以條件給出,判定 1000000∈E 只需檢查條件(S11),不必把 E 的元素列出或存放:集合不必依靠實際的容器而存在(MKO 第一段)。

  • 因為 B⊆A,所以 B∈A → reject — A 的元素是 1、2、3 這些整數;B 是集合,不是其中任何一個(在型別化讀法中 B∈A 甚至不是良構的)。
  • 1∈B 且 B∈𝓕,所以 1∈𝓕 → reject — ∈ 沒有傳遞性;𝓕 的元素是集合 {1,2} 與 {3},1 不是其中之一(S10)。
  • {1}⊆{1,2} 且 {1,2}∈𝓕,所以 {1}∈𝓕 → reject — {1} 不等於 {1,2} 也不等於 {3}(S09)。
  • Python 中 '12' in '123' 為 True,所以作為集合 '12'∈{'1','2','3'} → reject — 字串的 in 是子字串測試;'12' 不等於任何一個單字元字串(S14)。

結論與限制

2∈A 為真,4∈A 為假(仍是命題);B⊆A 為真而 A⊆B 為假(3∈A、3∉B);B∈𝓕 為真,{1}∈𝓕 為假,儘管 {1}⊆B;1000000∈E 為真(1000000=2·500000),7∈E 為假。1∈B 與 B∈𝓕 不推出 1∈𝓕,因為 ∈ 沒有傳遞性,而且在型別化語境中「1∈𝓕」不是良構命題。Python 的 '12' in '123' 為 True 是子字串測試,而 '12'∈{'1','2','3'} 為假:程式的成員測試不是集合隸屬的語義。

  • python_in 的字串成員測試語義已核對 Python 官方語言參考;這是文件核查,不宣稱稿件中的程式已實際執行。
  • 本稿以型別化語境為前提(typed_membership);不分型別的集合論中 1∈𝓕 的判定依賴數的編碼,本稿不處理。

驗證及來源綁定

11 個本稿宣告算術檢查;只支持所列算式。

  • source commit: b28a5edbd46279b1db2a3f3f48bb3f447e18899f
  • adopted source SHA-256: 6dd4b8c91e6e6cf5db9b127bce6c4343aa4499b9a88cd0668513c03caa224cfb
  • original source SHA-256: 6dd4b8c91e6e6cf5db9b127bce6c4343aa4499b9a88cd0668513c03caa224cfb
  • Lean: NOT_RUN · independent AI: NOT_MEASURED

同源完整 JSON(含公式、AST、反控制與修訂記錄)