擴展轉移函數(the extended transition function)
/ delta-hat = the symbol δ with a hat /
普通的轉移函數 δ 告訴你一個符號會做什麼。但真實的輸入是一整個字串,我們想問的是「從狀態 q 出發,讀完這整個字串後我會停在哪個狀態?」。擴展轉移函數——通常寫作 δ-hat(戴帽子的 δ)或 δ*——正是回答這件事:它吃進一個狀態與一整個字串,回傳「把字串全部讀完後所到達的那一個狀態」。
它由 δ 一個符號一個符號地縫合而成,按字串長度做歸納定義。基底情形是空字串:δ-hat(q, ε) = q,意思是「什麼都不讀,留在原地」。遞迴情形剝掉最後一個符號:要讀字串 w 後面接一個符號 a,先讀 w 到達某狀態 r = δ-hat(q, w),再多走一步普通轉移,δ-hat(q, wa) = δ(r, a)。反覆套用這條規則,你就只是一個符號一個符號地沿著路徑走,這正是執行機器在做的事。
為何要替它命名?因為它讓我們能乾淨地陳述整部機器的意義。一個字串 w 被接受,恰好當 δ-hat(q0, w) 落在 F 中;而 DFA 的語言就是 { w : δ-hat(q0, w) ∈ F }。沒有 δ-hat,我們只能非正式地談「那條路徑」;有了它,接受與被辨識的語言就成了可供你嚴格證明的一行定義。
在「以 1 結尾」的 DFA(起始 A)上,逐步計算 δ-hat(A, 101):δ-hat(A, ε) = A;δ-hat(A, 1) = δ(A,1) = B;δ-hat(A, 10) = δ(B,0) = A;δ-hat(A, 101) = δ(A,1) = B。因為 B 在 F 中,字串 101 被接受。
δ-hat 把整個字串穿過 δ;基底情形是 δ-hat(q, ε) = q。
δ-hat 不是新的機制——它只是反覆套用 δ、再給個名字而已。帽子用來區分「讀一個字串」的它與「讀一個符號」的普通 δ。