第六章:狀態機與不變量 — 動畫敘事

第七集 · Ch.6 狀態機與不變量
程式的骨架
每個跑起來的程式,都是一台狀態機。
它有當前的狀態,每次執行一步就轉換到新狀態。
不變量,是那些在每一步都不會改變的性質——
用它,我們能證明程式永遠不會出錯。
狀態機的組成
狀態機(State Machine)由三樣東西定義:
一般狀態 起始狀態 終止狀態(可選)
狀態集合 Q、起始狀態 q₀、轉換關係 δ(delta)
每次「執行一步」就是沿著一條箭頭從一個狀態走到另一個狀態。
電梯狀態機 — 互動
狀態:floor=1, door=closed, dir=idle
這個電梯有 4 層樓。觀察狀態如何因每個指令而改變。
電梯不能在門開著的時候移動——這是一個不變量
不變量的三步驟
要用不變量證明某件事,有標準的三步驟:
定義不變量 P(state)
明確說出你認為每一步都會保持的性質。
例:(X + Y) mod 3 = 0
驗證起始狀態滿足 P
直接代入起始狀態,確認 P 成立。
例:起點 (0,0):(0+0) mod 3 = 0
證明每一步都保持 P
對每種轉換,假設 P(現在狀態) 成立,推導出 P(下一狀態) 也成立。
例:移動 A (+1,+2) 後:(X+1+Y+2) mod 3 = (X+Y+3) mod 3 = 0
用 P 推導你要的結論
既然 P 永遠成立,任何違反 P 的狀態都永遠無法到達
例:目標 (1,1):(1+1) mod 3 = 2 ≠ 0,永遠到不了。
機器人迷宮 — 不變量實戰
不變量:(X + Y) mod 3 = 0 移動 A(+1,+2) 或 B(+2,+1) 後都保持不變
位置:(0,0) 不變量:(0+0) mod 3 = 0 目標 (1,1) 需要 mod = 2
觀念測驗
不變量能用來證明什麼?
小結
不變量是
永恆的守衛
程式執行幾百萬步,狀態不斷改變,
但不變量始終如一。
找到對的不變量,
就能一口氣證明程式在所有情況下都正確。
下一集:遞迴定義——用自己定義自己
閱讀完整第六章互動教材 →
1 / 7
本頁為動畫敘事版。看完後可前往 完整第六章 進行互動練習(穩定婚姻演算法、完整機器人迷宮)。

教材來源:Mathematics for Computer Science (Lehman, Leighton, Meyer)