目標與範圍
設 G=(V,E),V={0,1,2,3,4,5,6},E 恰為 {0,1}、{0,2}、{1,2}、{3,4}、{4,5} 五條邊。先證明「有 path 相連」是 V 上的等價關係,再以完整 BFS 求出每個等價類,證明 BFS 回傳的集合恰為該類,並得出 Q(G)={{0,1,2},{3,4,5},{6}},其中孤立頂點 6 自成單點分量。
只處理 MKO 範圍內的有限無向無 loop 簡單圖,頂點標籤 0 到 6 與完整邊集明示(假設 a1),可達性以完整 BFS 核對(假設 a2)。證明連通是等價關係、BFS 的正確性(不變量、終止與封閉性)以及分量的極大性。不處理有向圖的弱連通或強連通、分量縮約與演算法複雜度;不改動 canonical MKO 或英文 edition。
逐步主鏈
S01 · equivalent
操作前
E=\{\{0,1\},\{0,2\},\{1,2\},\{3,4\},\{4,5\}\}操作後
N(0)=\{1,2\},\ N(1)=\{0,2\},\ N(2)=\{0,1\},\ N(3)=\{4\},\ N(4)=\{3,5\},\ N(5)=\{4\},\ N(6)=\varnothing條件:無
規則:graph_basics · 依賴:G1
葉節點依據:graph_basics + set_builder + numeric_evaluation
由完整邊集讀出每個頂點的鄰點:無向邊 {a,b} 同時把 b 放入 N(a)、把 a 放入 N(b)。頂點 6 不出現在任何邊中,所以 N(6)=∅。度數依序為 2、2、2、1、2、1、0,總和 10=2·5,與握手引理一致(N1)。
S02 · implies
操作前
v\in V
操作後
v\sim v
條件:無
規則:def_unfold · 依賴:G2, G3
葉節點依據:def_unfold + exists_intro
對任何頂點 v,單點序列 (v) 是 k=0 的 walk(沒有需要核對的邊),唯一的頂點自然兩兩相異,所以它是由 v 到 v 的 path。因此 v∼v:反身性來自長度 0 的 path,不需要 loop(簡單圖本來就沒有 loop)。
S03 · implies
操作前
u\sim v
操作後
v\sim u
條件:無
規則:def_unfold · 依賴:G2, G3
葉節點依據:def_unfold + graph_basics
取由 u 到 v 的 path (x_i)_{i=0}^{k},令 y_i=x_{k−i}。則 y_0=v、y_k=u;每對相鄰頂點 {y_{i−1},y_i}={x_{k−i+1},x_{k−i}} 是原 path 的一條邊,因為無向邊滿足 {a,b}={b,a};頂點只是換了順序,仍兩兩相異。所以 (y_i) 是由 v 到 u 的 path。
S04 · implies
操作前
u\sim v,\ v\sim w
操作後
\text{there is a walk from }u\text{ to }w條件:無
規則:def_unfold · 依賴:G2, G3
葉節點依據:def_unfold + exists_elim
取由 u 到 v 的 path (x_i)_{i=0}^{k} 與由 v 到 w 的 path (z_j)_{j=0}^{l},因 x_k=v=z_0,把兩者在 v 處接起來得序列 (x_0,x_1,直到 x_k=z_0,z_1,直到 z_l),長度 k+l。每對相鄰頂點都是原來某條 path 的邊,所以這是由 u 到 w 的 walk。但它不一定是 path:兩段可能經過同一頂點。例:0,1,2 與 2,1 接成 0,1,2,1,頂點 1 重複。
S05 · implies
操作前
\text{walk from }u\text{ to }w操作後
u\sim w
條件:無
規則:L_walk_path · 依賴:S04
葉節點依據:well_ordering + contradiction + def_unfold
依引理 L_walk_path(在 S05.1、S05.2 證明),S04 的 walk 可換成由 u 到 w 的 path,所以 u∼w。連同 S04,這證明了 ∼ 的傳遞性。
S06 · implies
操作前
\sim\ \text{reflexive, symmetric, transitive}操作後
\bigcup_{v\in V}[v]=V,\ \ [u]=[v]\ \lor\ [u]\cap[v]=\varnothing條件:無
規則:L_classes_partition · 依賴:S02, S03, S05
葉節點依據:equiv_rel_def + set_extensionality
由 S02、S03、S05,∼ 是 V 上的等價關係。依引理 L_classes_partition(在 S06.1、S06.2 證明),它的類覆蓋 V,且任兩類相等或不交。這就是 MKO 所說的「互斥且覆蓋全部頂點」。
S07 · implies
操作前
R=\{0\},\ \text{queue }(0)操作後
R=\{0,1,2\},\ \text{queue empty}條件:無
規則:bfs_procedure · 依賴:S01, bfs_procedure
葉節點依據:bfs_procedure + set_operations_def
從 s=0 執行 BFS。取出 0:N(0)={1,2},1、2 都不在 R,依序加入,R={0,1,2},佇列 (1,2)。取出 1:N(1)={0,2} 都已在 R。取出 2:N(2)={0,1} 都已在 R。佇列空,停止。共取出 3 次,每次都檢查了被取出頂點的全部鄰點。
S08 · theorem_application
操作前
R=\{0,1,2\}\ \text{(complete BFS from 0)}操作後
[0]=\{0,1,2\}條件:G\ \text{finite, loop-free, simple}; \text{BFS run until the queue is empty}
規則:L_bfs_exact · 依賴:S07, G1
葉節點依據:set_extensionality + nat_induction + bfs_procedure
依引理 L_bfs_exact(在 S08.1 到 S08.3 證明),s=0 的完整 BFS 回傳的集合就是 [0]。所以 [0]={0,1,2}。
S09 · theorem_application
操作前
R=\{3\},\ \text{queue }(3)操作後
[3]=\{3,4,5\}條件:無
規則:L_bfs_exact · 依賴:S01, S08
葉節點依據:bfs_procedure + set_extensionality
3 是不在 [0] 中的最小頂點。取出 3:N(3)={4},加入 4。取出 4:N(4)={3,5},3 已在 R,加入 5。取出 5:N(5)={4} 已在 R。佇列空,R={3,4,5};依 L_bfs_exact,[3]={3,4,5}。
S10 · implies
操作前
N(6)=\varnothing
操作後
[6]=\{6\}條件:無
規則:L_bfs_exact · 依賴:S01, S02, G2, G3
葉節點依據:bfs_procedure + def_unfold
6 是不在 [0]∪[3] 中的唯一頂點。BFS 取出 6,N(6)=∅,沒有加入任何點,R={6},所以 [6]={6}。直接核對:長度至少 1 的 path 的第一條邊必含 6,但 E 中沒有含 6 的邊;所以由 6 出發只有長度 0 的 path (6)。孤立頂點形成單點分量,不能因為它不出現在邊集中就遺漏。
S11 · implies
操作前
[0]=\{0,1,2\},\ [3]=\{3,4,5\},\ [6]=\{6\}操作後
Q(G)=\{\{0,1,2\},\{3,4,5\},\{6\}\}條件:無
規則:L_classes_partition · 依賴:S06, S08, S09, S10
葉節點依據:set_operations_def + finite_counting_basics + set_extensionality
三個集合兩兩不交,聯集為 V,元素個數 3+3+1=7=|V|(N2)。任取一類 [v]:v 屬於三者之一 C,於是 v∈[v]∩C,依 L_classes_partition 得 [v]=C。所以 Q(G) 恰有這三個類,例如 [1]=[2]=[0]、[4]=[5]=[3]。
S12 · implies
操作前
C=[v]
操作後
C\ \text{connected};\ C\subseteq S,\ S\ \text{connected}\Rightarrow S=C條件:無
規則:mko_component_def · 依賴:S03, S05, G3
葉節點依據:set_extensionality + subset_def + def_unfold
C 中任兩點 a、b 都滿足 v∼a、v∼b,由對稱與傳遞有 a 到 b 的 path。還要確認它在 C 內:對路徑上任一頂點 z,把 v 到 a 的 path 與 a 到 z 的前段接成 walk,再用 L_walk_path 得 v∼z,故 z∈C。因此誘導子圖 G[C] 連通,不只是各點在原圖中連通。若連通子集 S⊇C,對任一 s∈S,S 內的 v 到 s 的 path 也是原圖 path,所以 s∈[v]=C,故 S=C。一般子集不能省略內部路徑要求,例如 {3,5} 在原圖可經 4 相連,但其誘導子圖不連通。{0,1} 則內部連通而真包含於 {0,1,2},所以不是分量。
S13 · implies
操作前
\text{S06, S11, S12}操作後
Q(G)=\{\{0,1,2\},\{3,4,5\},\{6\}\},\ \text{maximal, disjoint, covering }V條件:無
規則:mko_component_def · 依賴:S06, S11, S12
葉節點依據:and_intro_elim + def_unfold
∼ 是等價關係(S06),其類恰為 {0,1,2}、{3,4,5}、{6}(S11),每一類都是極大連通集(S12)。所以 G 的連通分量就是這三個集合,互斥且覆蓋全部頂點,孤立頂點 6 為單點分量。
局部子步與引理
S05.1 · implies
操作前
\text{some walk from }u\text{ to }w操作後
\text{a walk }(y_i)_{i=0}^{m}\text{ from }u\text{ to }w\text{ of least length }m條件:無
規則:well_ordering · 依賴:G2, well_ordering
葉節點依據:well_ordering + exists_elim
所有由 u 到 w 的 walk 的長度構成 ℕ 的子集,且因至少有一條 walk 而非空。依良序原理它有最小元素 m;取一條長度為 m 的 walk (y_i)_{i=0}^{m}。
S05.2 · implies
操作前
(y_i)_{i=0}^{m}\ \text{shortest}操作後
y_i\neq y_j\ (i<j),\ \text{so }(y_i)\text{ is a path}條件:無
規則:contradiction · 依賴:S05.1, G2
葉節點依據:contradiction + order_basics + def_unfold
假設某 i<j 有 y_i=y_j。刪去 y_{i+1} 到 y_j,得序列 (y_0 到 y_i, y_{j+1} 到 y_m)。接點處 {y_i,y_{j+1}}={y_j,y_{j+1}}∈E(若 j=m 則無接點邊),所以它仍是由 u 到 w 的 walk,長度 m−(j−i)<m,與 m 最小矛盾。故頂點兩兩相異,(y_i) 是 path。例:0,1,2,1 中 y_1=y_3=1,刪去後得 (0,1),長度 3−(3−1)=1(N4)。S05.1 與 S05.2 合起來證得引理 L_walk_path。
S06.1 · equivalent
操作前
v\sim v
操作後
v\in[v]
條件:無
規則:set_builder · 依賴:S02, G3
葉節點依據:set_builder
依集合建構式,v∈[v] 當且僅當 v∈V 且 v∼v;由 S02 後者成立。所以每個頂點都在自己的類中,各類的聯集是 V。
S06.2 · implies
操作前
x\in[u]\cap[v]
操作後
[u]=[v]
條件:無
規則:set_extensionality · 依賴:S03, S05, G3
葉節點依據:set_extensionality + subset_def + contrapositive
x∈[u]∩[v] 表示 u∼x 且 v∼x。由對稱 x∼v,再由傳遞 u∼v。若 y∈[v],則 u∼v、v∼y,所以 u∼y,y∈[u],得 [v]⊆[u]。同理由 v∼u(對稱)與 u∼y 得 [u]⊆[v]。依集合相等,[u]=[v]。逆否:不相等的兩類必不交。S06.1 與 S06.2 合起來證得引理 L_classes_partition。
S08.1 · implies
操作前
x\in R\ \text{at any moment of the run}操作後
s\sim x
條件:\{x,y\}\in E\Rightarrow x\neq y
規則:nat_induction · 依賴:S02, S05, bfs_procedure, nat_induction
葉節點依據:nat_induction + subset_def
對加入 R 的次數歸納。開始時 R={s},且 s∼s(S02)。設某時刻 R 的每個元素都 ∼s。下一個被加入的 y 是某個被取出的 x∈R 的鄰點:s∼x(歸納假設);{x,y}∈E 且 x≠y(無 loop),所以 (x,y) 是長度 1 的 path,x∼y;由傳遞性(S05)s∼y。故不變量「R⊆[s]」在每次加入後仍成立。
S08.2 · implies
操作前
\text{BFS from }s操作後
\text{BFS stops};\ \forall x\in R:\ N(x)\subseteq R條件:|V|<\infty
規則:bfs_procedure · 依賴:G1, bfs_procedure
葉節點依據:bfs_procedure + finite_counting_basics + subset_def
頂點只在第一次被加入 R 時排入佇列;R 只增不減且 R⊆V,所以每個頂點至多入列一次,對任意有限 V,取出次數至多 |V|(本例為 7),迴圈必停止(終止)。停止時佇列為空,所以 R 中每個頂點都已被取出;取出 x 時 N(x) 的每個 y 不是已在 R 就是被加入 R。因此 R 對鄰接封閉:對每個 x∈R 有 N(x)⊆R。
S08.3 · implies
操作前
s\sim w
操作後
w\in R,\ \text{hence }[s]\subseteq R\ \text{and}\ R=[s]條件:無
規則:nat_induction · 依賴:S08.2, G2, G3, nat_induction
葉節點依據:nat_induction + set_extensionality + subset_def
取由 s 到 w 的 path (x_i)_{i=0}^{k},對 i 歸納證 x_i∈R:x_0=s∈R;若 x_i∈R,因 {x_i,x_{i+1}}∈E,x_{i+1}∈N(x_i)⊆R(S08.2)。所以 w=x_k∈R,即 [s]⊆R。結合 S08.1 的 R⊆[s],依集合相等得 R=[s]。S08.1 到 S08.3 合起來證得引理 L_bfs_exact。