4.3
プッシュダウン・オートマトンによるパース
125
4.2.2
非等価性
でも待ってください。「3.4 等価性」では、スタックのない非決定的な機械は決定的な機械と能力的
にまったく等価であることを見ました。RubyによるNFAシミュレーションは、入力文字列の文字を読
みながら有限個の「シミュレーション状態」間を移動することで、DFAと同じように振る舞いました。
これによって、任意のNFAを、同じ文字列を受理するDFAに変換することができました。さて、非決
定性は能力を高めてくれるものなのでしょうか。それともRubyのNPDAシミュレーションはDPDAと
同じように振る舞うのでしょうか。任意の非決定性プッシュダウン・オートマトンを、決定性プッシュ
ダウン・オートマトンに変換するアルゴリズムは存在するのでしょうか。
実のところ、そういうアルゴリズムは存在しないことがわかっています。NFAからDFA への変換が
うまくいくのは、取り得る複数のNFA状態を1 つのDFA 状態として表現できるためです。NFAのシ
ミュレーションに必要なのは、現在どの状態にいる可能性があるかを記録し、入力文字を読むたびに
別の取り得る状態の集合を選ぶことだけです。これは適切な規則を与えることで、簡単に実現するこ
とができます。
ところが、これはPDAの場合にはうまくいきません。複数のNPDA 構成を1つのDPDA 構成として
うまく表現できないためです。これは驚くことではありません。問題はスタックにあります。NPDAシ
ミュレー