Arden 法則(Arden's rule)
/ AR-dunz /
除了畫狀態又擦狀態之外,還有一條代數捷徑:把自動機寫成一組關於語言的方程式,再像中學代數那樣解它。Arden 法則就是讓那些方程式可解的關鍵一招。它告訴你如何解開一個「語言部分地以自身定義」的方程式,而這在自動機有迴圈時必定發生。
為每個狀態設一個未知數:令 X_i 為所有把自動機從狀態 i 帶到接受狀態的字串的語言。讀出轉移會得到像 X = AX + B 這樣的方程式,其中 A 與 B 是已知的語言,而 AX 這一項反映「走一個 A 步並繼續下去」。Arden 法則說:若 A 不含空字串 ε,則 X = AX + B 的唯一解是 X = A*B。直覺上,你必須走零個或多個 A 步(那就是 A*),再以 B 中的一個字串收尾。解完整個系統、把解回代、再讀出起始狀態的方程式,就得到該語言的一個正規表示式。
Arden 法則是 Kleene 定理反向方向之代數證明的骨幹,是狀態消去法之外的另一選擇,有些人覺得它更乾淨,因為它純粹是解方程式。要遵守的唯一條件是「ε 不在 A 中」這個但書:若 A 可能匹配空字串,解就不再唯一(A*B 仍是一個解,但 A*(B + 任何永遠繞圈的東西) 也是),法則便不適用。只要遵守這個提醒,Arden 法則與狀態消去法總會給出等價的表示式,只是寫法可能不同。
在 ε 不屬於 L(a) 的條件下解 X = aX + b:由 Arden 法則 X = a*b,意思是「任意數量的 a 再接一個 b」。對一個兩狀態的迴圈,你會得到一個小系統;把解回代便產出起始狀態的正規表示式。
X = AX + B 的不動點是 A*B,前提是 ε 不在 A 中。
「ε 不在 A 中」這個條件至關重要:若 A 能匹配空字串,X = AX + B 就有不止一個解,Arden 法則便無法鎖定唯一答案。