70
3
章 最も単純なコンピュータ
=> #<struct DFADesign
…
>
>>
dfa_design.accepts?('a')
=> false
>>
dfa_design.accepts?('baa')
=> false
>>
dfa_design.accepts?('baba')
=> true
3.2
非決定性有限オートマトン
DFAが理解しやすく実装もしやすいのは、なじみのある機械とよく似ているためです。実際のコン
ピュータにある複雑さをすべて取り除き、使いなれた機械からもっと離れることで、これまでとは異な
る考え方で実験してみましょう。実際のシステムで動かすときの難しさについては、忘れてしまって構
いません。
1つのやり方は、これまでの仮定や制約を少しずつ取り除いていくことです。まず第一に、決定性制
約が制限になっているように見えます。私たちはすべての状態ですべての可能な入力文字に関心があ
るわけではありません。関心のない文字に関する規則をなくしてしまい、想定外のことが起こると機械
は失敗状態になる、と考えるのはどうでしょうか。より風変わりに、機械が矛盾する規則を持つことを
許
して、複数の実行パスを可能にすると、どうなるでしょうか。第二に、これまでは入力ストリームか
ら読んだ文字に応じて状態を変更していましたが、何も読まなくても状態を変更できるとどうなるで
しょうか。
ここでは有限オートマトンの能力に手を加えることで、どんな可能性が新たに切り開かれるのかを見
ていきます。
3.2.1
非決定性
3