上下文無關語言的性質

上下文無關幫浦引理並非充分條件(not sufficient)

人們很想把幫浦引理當成成員測試:跑一遍,若語言通過,就宣告它是上下文無關。那是「錯」的,而且這個錯誤很要緊。引理是一條單行道。它是「必要」條件——每個上下文無關語言都滿足它——但「不」是「充分」條件:有些「不」是上下文無關的語言照樣滿足這個抽取條件。通過引理證明不了任何正面結論;只有「通不過」才證明一個語言不是上下文無關。

邏輯上,引理說「上下文無關 蘊含 可抽取」。取逆否命題(contrapositive),「不可抽取 蘊含 不是上下文無關」——這才是你在證明裡用的有效方向。但反過來,「可抽取 蘊含 上下文無關」根本不成立。所以當一個語言抽取起來沒問題,你就卡在懸空狀態:它「可能」是上下文無關、也可能不是——引理在這兩邊都沒告訴你什麼。要了結這種情形,你需要別的工具:Ogden 引理(它可能在原始引理通過之處失敗)、與正規語言取交集以暴露非上下文無關的核心,或直接構造文法或 PDA 來證明它「是」上下文無關。

具體的見證確實存在。有些語言被設計成每個長字串都有一塊容易重複的部分(所以原始幫浦引理被滿足),但用 Ogden 引理或封閉性論證細看後,它們其實「不」是上下文無關。教訓和正規語言的情況一樣:幫浦引理是「非成員」偵測器,「永遠」不是成員證書。把「它能抽取」當成「無定論」,而把「它無法抽取」留給你那個堅定的「不」。

存在一些非上下文無關語言,卻仍滿足原始的 CFL 幫浦引理——每個夠長的字串都有一個能抽取且留在語言內的 u v x y z' 切法。只有更鋒利的工具(Ogden 引理,或與正規語言取交集)才揭出它們不是上下文無關。所以「它能抽取」必須讀作「沒有結論」、絕不是「上下文無關」。

通過幫浦引理沒有定論;只有通不過它才證明非上下文無關性。

和正規幫浦引理同樣的陷阱:它只能「反駁」屬於家族、絕不能確認。「抽取沒問題」=無定論;要更進一步就改用 Ogden 引理或封閉性論證。

又稱
necessary but not sufficient (CFL)one-way pumping lemma必要非充分