逐步主鏈
S01 · definition
操作前
\text{ordered and unordered selections of }k\text{ objects from }X操作後
P(n,k)=|\mathcal{P}_k(X)|,\quad C(n,k)=|\mathcal{C}_k(X)|條件:0\le k\le n
規則:def_intro · 依賴:G1, G2
葉節點依據:def_intro + mko_perm_comb
把兩種計數對象寫成集合。依 MKO 的假設,有序選取是 X 中 k 個兩兩相異元素的 k 元組 (x_i)_{i=1}^{k},順序不同就是不同的選取;無序選取是 X 的 k 元子集合,只記錄選了哪些物件。P(n,k)、C(n,k) 分別是這兩個集合的元素個數。之後要證明的是這兩個個數等於 MKO 的公式,而不是把公式當成定義。
S02 · implies
操作前
m!\ (m\in\mathbb{N})操作後
m!\geq 1,\ \text{hence}\ m!\neq 0條件:m\in\mathbb{N}
規則:L_fact_pos · 依賴:mko_factorial_def
葉節點依據:nat_induction + mko_factorial_def + order_basics
後面要除以 n!、(n−k)! 與 k!,所以先確定階乘從不為零。依引理 L_fact_pos,每個 m! 都至少是 1;以歸納完成的證明在 S02.1 與 S02.2。
S03 · induction_base
操作前
\mathcal{P}_0(X)操作後
\mathcal{P}_0(X)=\{()\},\quad |\mathcal{P}_0(X)|=1=\frac{n!}{(n-0)!}條件:n!\neq 0
規則:tuple_eq · 依賴:G1, G2, S02, tuple_eq
葉節點依據:tuple_eq + frac_rules + L_fact_pos
0 元組只有空元組 ();它沒有任何項,「兩兩相異」自動成立,所以 𝒫_0(X)={()},恰有 1 個元素。另一方面 n!/(n−0)!=n!/n!=1,這個除法需要 n!≠0(S02)。這是對 k 歸納的起點,也就是 MKO 所說「空排列有一種」。
S04 · implies
操作前
\mathcal{P}_{k+1}(X)\quad(k+1\le n)操作後
\mathcal{P}_{k+1}(X)=\bigcup_{t\in\mathcal{P}_k(X)}E(t),\quad E(t)=\{t^\frown x\mid x\in X\setminus\operatorname{set}(t)\},\ \text{pairwise disjoint}條件:k+1\le n
規則:set_extensionality · 依賴:G2, tuple_eq
葉節點依據:set_extensionality + tuple_eq + set_operations_def
固定 k 使 k+1≤n。把每個 (k+1) 元有序選取按它的前 k 項分類:E(t) 收集以 t 開頭、再接一個不在 t 中的物件的元組。子步 S04.1、S04.2 證明兩個方向的包含,S04.3 證明各類互斥。
S05 · implies
操作前
E(t)\quad(t\in\mathcal{P}_k(X))操作後
|E(t)|=n-k\geq 1
條件:k+1\le n
規則:L_complement_count · 依賴:G1, G2, S04
葉節點依據:L_complement_count + finite_counting_basics + injective_surjective_def
每一類 E(t) 都恰有 n−k 個元素,與 t 是哪個元組無關;這是可以寫成乘積的關鍵(計數原理 MKO 要求每一階段的可選數已明確)。證明分三個子步:補集計數(S05.1)、set(t) 恰有 k 個元素(S05.2)、x↦t⌢x 是雙射(S05.3)。因 k+1≤n,n−k≥1。
S06 · implies
操作前
\mathcal{P}_{k+1}(X)=\bigcup_{t\in\mathcal{P}_k(X)}E(t)操作後
|\mathcal{P}_{k+1}(X)|=|\mathcal{P}_k(X)|\cdot(n-k)條件:k+1\le n
規則:disjoint_union_count · 依賴:S04, S04.3, S05
葉節點依據:disjoint_union_count + finite_counting_basics
S04 把 𝒫_{k+1}(X) 寫成以 t∈𝒫_k(X) 為索引、兩兩互斥的類 E(t) 的聯集,S05 說每一類都恰有 n−k 個元素。依 disjoint_union_count(c=n−k),總數是 |𝒫_k(X)|·(n−k)。這就是 MKO 所說「每次可選數依次為 n、n−1,以此類推」的嚴格形式:第 k+1 次選取時有 n−k 個選項。
S07 · induction_step
操作前
|\mathcal{P}_k(X)|=\frac{n!}{(n-k)!}操作後
|\mathcal{P}_{k+1}(X)|=\frac{n!}{(n-(k+1))!}條件:k+1\le n
規則:frac_rules · 依賴:S06, S02, mko_factorial_def
葉節點依據:frac_rules + mko_factorial_def + L_fact_pos
設歸納假設 |𝒫_k(X)|=n!/(n−k)! 且 k+1≤n。由 S06,|𝒫_{k+1}(X)|=n!(n−k)/(n−k)!。子步 S07.1 把 (n−k)! 拆成 (n−k)·(n−k−1)!,S07.2 約去公因子 n−k,得到 n!/(n−(k+1))!。
S08 · implies
操作前
Q(k):\ k\le n\Rightarrow|\mathcal{P}_k(X)|=\frac{n!}{(n-k)!}操作後
P(n,k)=\frac{n!}{(n-k)!}\quad\text{for all}\ 0\le k\le n條件:無
規則:nat_induction · 依賴:S03, S07
葉節點依據:nat_induction + forall_intro + imp_intro
對 k 歸納命題 Q(k):「若 k≤n,則 |𝒫_k(X)|=n!/(n−k)!」。Q(0) 是 S03。設 Q(k) 成立:若 k+1≤n,則 k≤n,由 Q(k) 得 |𝒫_k(X)|=n!/(n−k)!,再由 S07 得 Q(k+1);若 k+1>n,Q(k+1) 的前件不成立,Q(k+1) 自動為真。依歸納原理所有 k 都有 Q(k)。證明只用到 |X|=n 與元素相異,沒有用到 X 的具體元素,所以對每個 n 元集合都成立(forall_intro)。
S09 · definition
操作前
t\in\mathcal{P}_k(X)操作後
\sigma(t)=\operatorname{set}(t)\in\mathcal{C}_k(X)條件:無
規則:function_def · 依賴:G2, S05.2
葉節點依據:function_def + def_intro
定義 σ:𝒫_k(X)→𝒞_k(X),把有序選取送到它所選物件的集合,也就是「忘記順序」。σ 有定義:依 S05.2 的推理,set(t) 是 X 的子集合且恰有 k 個元素,所以 set(t)∈𝒞_k(X),而且每個 t 只對應一個集合。
S10 · implies
操作前
\sigma^{-1}(\{A\})\quad(A\in\mathcal{C}_k(X))操作後
\sigma^{-1}(\{A\})=\mathcal{P}_k(A)條件:A\subseteq X,\ |A|=k
規則:set_extensionality · 依賴:S09
葉節點依據:set_extensionality + image_preimage_def + L_same_size_subset
對每個 k 元子集合 A,被 σ 送到 A 的有序選取,恰好是 A 中 k 個相異元素的 k 元組,也就是 A 的各種排序。兩個方向的包含見 S10.1 與 S10.3,S10.2 證明所需的有限集合引理。
S11 · theorem_application
操作前
|\sigma^{-1}(\{A\})|=|\mathcal{P}_k(A)|操作後
|\sigma^{-1}(\{A\})|=\frac{k!}{(k-k)!}=\frac{k!}{0!}=k!條件:|A|=k
規則:forall_elim · 依賴:S08, S10
葉節點依據:forall_elim + mko_factorial_def + numeric_evaluation
S08 對每個 n 元集合與每個 0≤k≤n 成立。把它用在 k 元集合 A 上(n 換成 k,選取個數仍是 k,條件 0≤k≤k 成立),得 |𝒫_k(A)|=k!/(k−k)!=k!/0!=k!,因 0!=1。所以每個 k 元子集合恰有 k! 種排序,這就是 MKO 所說除以 k! 的依據。
S12 · implies
操作前
\mathcal{P}_k(X)=\bigcup_{A\in\mathcal{C}_k(X)}\sigma^{-1}(\{A\})操作後
P(n,k)=C(n,k)\cdot k!
條件:無
規則:disjoint_union_count · 依賴:S09, S10, S11
葉節點依據:disjoint_union_count + function_def + image_preimage_def
每個 t∈𝒫_k(X) 恰屬於一個纖維,即 σ^{-1}({σ(t)})(σ 是函數,只給 t 一個像),所以這些纖維兩兩互斥且聯集是 𝒫_k(X)。每個纖維恰有 k! 個元素(S11),纖維共有 |𝒞_k(X)|=C(n,k) 個。依 disjoint_union_count(c=k!),P(n,k)=C(n,k)·k!。
S13 · equivalent
操作前
P(n,k)=C(n,k)\cdot k!
操作後
C(n,k)=\frac{P(n,k)}{k!}=\frac{n!}{k!\,(n-k)!}條件:k!\neq 0
規則:mul_inverse_nonzero · 依賴:S12, S08, S02
葉節點依據:mul_inverse_nonzero + frac_rules + eq_replace + L_fact_pos
因 k!≠0(S02),兩邊同乘 1/k! 得 C(n,k)=P(n,k)/k!;再代入 S08 的 P(n,k)=n!/(n−k)!,依 frac_rules 得 n!/(k!(n−k)!)。
S14 · implies
操作前
k=0
操作後
P(n,0)=\frac{n!}{n!}=1,\quad C(n,0)=\frac{n!}{0!\,n!}=1,\quad \mathcal{C}_0(X)=\{\varnothing\}條件:0!=1; n!\neq 0
規則:forall_elim · 依賴:S08, S13, G2
葉節點依據:forall_elim + mko_factorial_def + frac_rules
代入 k=0:P(n,0)=n!/n!=1,C(n,0)=n!/(0!·n!)=n!/n!=1(0!=1)。直接看集合也一致:沒有元素的子集合只有空集合,所以 𝒞_0(X)={∅},空選取計為一種,正如 MKO 假設 a2;n=0(X 為空)時也成立。
S15 · implies
操作前
n=5,\ k=3
操作後
P(5,3)=60,\quad C(5,3)=10,\quad 10\cdot 3!=60
條件:0\le 3\le 5
規則:forall_elim · 依賴:G3, S06, S08, S13
葉節點依據:forall_elim + numeric_evaluation
代入 n=5、k=3:P(5,3)=5!/2!=120/2=60,與 S06 的遞推 1、5、20、60(依次乘 5、4、3)一致;C(5,3)=5!/(3!·2!)=120/12=10。核對 S12:10·3!=60。以 A={a,b,c} 為例,它的纖維恰是 6 個有序選取 (a,b,c)、(a,c,b)、(b,a,c)、(b,c,a)、(c,a,b)、(c,b,a),而 3!=6。
局部子步與引理
S02.1 · induction_base
操作前
0!
操作後
0!=1\geq 1
條件:無
規則:mko_factorial_def · 依賴:mko_factorial_def
葉節點依據:mko_factorial_def
依定義 F(0)=1,所以 0!=1≥1。0! 是 1,不是 0;這正是階乘 MKO 提醒的常見誤解。
S02.2 · induction_step
操作前
m!\geq 1
操作後
(m+1)!=(m+1)\,m!\geq m!\geq 1
條件:m\geq 0
規則:order_basics · 依賴:S02.1, mko_factorial_def, order_basics
葉節點依據:order_basics + mko_factorial_def + nat_induction
設 m!≥1。由遞迴 (m+1)!=(m+1)·m!。因 m≥0,(m+1)·m!−m!=m·m!≥0(兩個非負數的乘積非負),所以 (m+1)!≥m!≥1。依歸納原理,S02.1 與 S02.2 合起來對所有 m 證得引理 L_fact_pos。
S04.1 · implies
操作前
u\in\mathcal{P}_{k+1}(X)操作後
u=t^\frown x,\ t\in\mathcal{P}_k(X),\ x\in X\setminus\operatorname{set}(t)條件:無
規則:tuple_eq · 依賴:G2, tuple_eq
葉節點依據:tuple_eq + set_operations_def + subset_def
任取 u∈𝒫_{k+1}(X)。依 tuple_eq,u=t⌢x,t 是 u 的前 k 項、x 是最後一項。t 的項都是 u 的項,所以在 X 中且兩兩相異,t∈𝒫_k(X)。x 與 u 的其他每一項都不同,也就是 x∉set(t),所以 x∈X∖set(t),u∈E(t)。
S04.2 · implies
操作前
t\in\mathcal{P}_k(X),\ x\in X\setminus\operatorname{set}(t)操作後
t^\frown x\in\mathcal{P}_{k+1}(X)條件:x\notin\operatorname{set}(t)
規則:tuple_eq · 依賴:G2, tuple_eq, S04.1
葉節點依據:tuple_eq + set_operations_def + set_extensionality
反過來,設 t∈𝒫_k(X)、x∈X 且 x∉set(t)。t⌢x 的前 k 項兩兩相異,最後一項 x 又不等於前面任何一項,所以 k+1 項兩兩相異且都在 X 中,t⌢x∈𝒫_{k+1}(X)。S04.1 與 S04.2 合起來,依 set_extensionality 得到 S04 的集合等式。
S04.3 · implies
操作前
t^\frown x=s^\frown y
操作後
t=s\ \land\ x=y
條件:無
規則:tuple_eq · 依賴:tuple_eq
葉節點依據:tuple_eq + and_intro_elim
若 t⌢x=s⌢y,兩個元組逐位相等:前 k 項給出 t=s,最後一項給出 x=y。所以 t≠s 時 E(t) 與 E(s) 沒有共同元素;同一個 E(t) 中,不同的 x 給出不同的元組。
S05.1 · implies
操作前
A\subseteq Y,\ Y\ \text{finite}操作後
|Y\setminus A|=|Y|-|A|
條件:A\subseteq Y
規則:finite_counting_basics · 依賴:finite_counting_basics, set_operations_def
葉節點依據:finite_counting_basics + set_operations_def + eq_congruence
因 A⊆Y,Y=A∪(Y∖A),而且 A 與 Y∖A 互斥(Y∖A 的元素不在 A 中)。依 finite_counting_basics,|Y|=|A|+|Y∖A|;兩邊同減 |A| 得 |Y∖A|=|Y|−|A|。這證得引理 L_complement_count。
S05.2 · implies
操作前
t=(x_i)_{i=1}^{k}\in\mathcal{P}_k(X)操作後
|\operatorname{set}(t)|=k,\quad |X\setminus\operatorname{set}(t)|=n-k條件:無
規則:finite_counting_basics · 依賴:G2, S05.1
葉節點依據:injective_surjective_def + finite_counting_basics + L_complement_count
映射 i↦x_i 從位置集合 {i∈ℕ ∣ 1≤i≤k} 到 set(t) 是滿射(set(t) 就是各項的集合),也是單射(各項兩兩相異)。依 finite_counting_basics 的雙射計數,|set(t)|=k。又 set(t)⊆X,依 S05.1(Y=X、A=set(t)),|X∖set(t)|=n−k。這個推理對任何 t∈𝒫_k(X) 都成立,後面 S09、S10.3 也會用到。
S05.3 · implies
操作前
x\mapsto t^\frown x:\ X\setminus\operatorname{set}(t)\to E(t)操作後
|E(t)|=|X\setminus\operatorname{set}(t)|=n-k條件:無
規則:injective_surjective_def · 依賴:S04.3, S05.2
葉節點依據:injective_surjective_def + finite_counting_basics
依 E(t) 的定義,它的每個元素都是某個 x∈X∖set(t) 的 t⌢x,所以這個映射是滿射;依 S04.3,t⌢x=t⌢y 推出 x=y,所以是單射。有雙射的兩個有限集合元素個數相同,故 |E(t)|=n−k。
S07.1 · equivalent
操作前
(n-k)!
操作後
(n-k)\cdot(n-k-1)!
條件:n-k-1\in\mathbb{N}
規則:mko_factorial_def · 依賴:mko_factorial_def
葉節點依據:mko_factorial_def + eq_replace
令 m=n−k−1;因 k+1≤n,m 是自然數,而且 n−k=m+1。依遞迴 F(m+1)=(m+1)F(m),(n−k)!=(n−k)·(n−k−1)!。
S07.2 · equivalent
操作前
\frac{n!\,(n-k)}{(n-k)\cdot(n-k-1)!}操作後
\frac{n!}{(n-k-1)!}=\frac{n!}{(n-(k+1))!}條件:n-k\neq 0; (n-k-1)!\neq 0
規則:frac_rules · 依賴:S07.1, S02
葉節點依據:frac_rules + L_fact_pos + eq_replace
依 frac_rules 中「分子分母同乘一個非零數,分數不變」的規則,把非零公因子 n−k 從分子與分母約去;(n−k−1)!≠0 由 S02 保證。最後 n−k−1=n−(k+1)。
S10.1 · implies
操作前
t\in\mathcal{P}_k(X),\ \sigma(t)=A操作後
t\in\mathcal{P}_k(A)條件:無
規則:image_preimage_def · 依賴:S09, image_preimage_def
葉節點依據:image_preimage_def + def_unfold
若 σ(t)=A,t 的每一項都在 set(t)=A 中,各項又兩兩相異,所以 t 是 A 中 k 個相異元素的 k 元組,t∈𝒫_k(A)。
S10.2 · implies
操作前
B\subseteq A,\ |B|=|A|,\ A\ \text{finite}操作後
B=A
條件:A\ \text{finite}
規則:L_complement_count · 依賴:S05.1, set_operations_def
葉節點依據:L_complement_count + set_extensionality + set_operations_def
由 L_complement_count(S05.1,取 Y=A),|A∖B|=|A|−|B|=0,所以 A∖B 是空集合:A 的每個元素都在 B 中,A⊆B。連同 B⊆A,依 set_extensionality 得 B=A。這證得引理 L_same_size_subset。
S10.3 · implies
操作前
t\in\mathcal{P}_k(A)操作後
t\in\mathcal{P}_k(X)\ \land\ \sigma(t)=A條件:A\subseteq X
規則:L_same_size_subset · 依賴:S05.2, S10.2, G2
葉節點依據:L_same_size_subset + subset_def + set_extensionality
設 t∈𝒫_k(A)。因 A⊆X,t 也是 X 中相異元素的 k 元組,t∈𝒫_k(X)。依 S05.2 的推理 |set(t)|=k=|A|,而且 set(t)⊆A;依 L_same_size_subset,set(t)=A,即 σ(t)=A。S10.1 與 S10.3 合起來給出 σ^{-1}({A})=𝒫_k(A)。