計算理論(正規表現と有限オートマトン)
前回の復習
列の長さをと書く.
普通に受け取ってしまったけど,
そう言えばなんで絶対値記号を使うんでしょうね,
abs
とlength
に同じ記号を使うのはおかしいのでは?
スター演算ってプログラミング言語で言う正規表現の何に値するんだ?
と思ったけど,
よく考えたらそのまま*
ですね.
言語が正規表現で表現されるなら, を識別するε入力付非決定性有限オートマトンが存在する.
どのような正規表現であっても, 元々の記号から
- 連接
- 和集合
- スター演算
いずれかを複数回使って表現されている.
つまり
data Regex = RegexSymbol String | RegexConjunction [Regex] | RegexUnion [Regex] | RegexStar Regex
ということですね.
資料のオートマトンの図が冗長に思えたので質問してみたら本当に冗長でした.
grepの名前の由来が「get regular expression」という話が出てきたのでググったら,
edのg/re/p
コマンドが元ネタになっていて,
後から複数の意味づけがされているらしいですね.
有限オートマトンで識別できない言語
例えば括弧の対応は有限オートマトン/正規表現では識別することが出来ない, 開き括弧の数を記憶する必要があるが, 有限オートマトンでは有限個しか記憶できないので, 不可能.
言語がある有限オートマトンで識別できたと仮定する. このの状態数をとする. の初期状態から記号による遷移を回辿ったとする. このとき回の遷移の状態が全て異なることは不可能である, よってこの遷移中には少なくとも2個の同じ状態が現れているはずである. この同じ状態が回目と回目に起きたとする. ここで, 列は言語に属しているので, 受理されなくてはならない. しかし, 回目と回目の遷移で同じ状態にいるはずなので, 列と列を読み込んだ時点で同じ状態にいるはずである. すなわち列も受理されることを意味する. これはが言語を識別できないことを意味する.
正規表現で表現できる言語を正規言語という. 正規言語は有限オートマトンで表現できるクラスと等しい. 言語は正規言語ではない.
図に対する疑問
プレゼンに出された図で連接の有限オートマトンがと書かれていて謎. 途中のイプシロンは要らないと思って質問してみたけれど, 講師の方も 「要らない, なんでこう書かれているかはわからない」 とのこと. 要る場合があるんでしょうか? 謎です.