正規言語のクリーネ閉包
正規言語 L を考えます。言語 L のクリーネ閉包もまた正規言語であることを証明します。
言語のクリーネ閉包とは
言語 L のクリーネ閉包は L∗ で表します。クリーネ閉包は、言語 L の語を有限個連接してつくれるすべての語からなります。クリーネ閉包は次のように定義できます。
ここで、∘ は連接の演算を表します。クリーネ閉包には空語 ϵ も含まれます。
手順の形式化
言語の連接の場合ととてもよく似た手順で進めます。ただし、2つの異なるオートマトンをつなぐのではなく、1つのオートマトンを自分自身につなぎます。つまり、オートマトンの受理状態から、同じオートマトンの初期状態へ ε 遷移を引きます。しかし、クリーネ閉包には空語も含まれなければなりません。どうすればよいでしょうか。初期状態を受理状態にすることも考えられます。そうするとオートマトンは空語を受理しますが、それ以外の余計な語まで受理してしまうおそれがあります。そこで、代わりに新しい初期状態をつくり、この新しい初期状態からもとの初期状態へ ε 遷移を引きます。
正規言語 L1 と、この言語を受理する次のオートマトンがあります。
次の条件を満たす非決定性オートマトン A = ⟨Q, Σ, δ, qs, F⟩ をつくります。
- Q = Q1 ∪ {qs}
- Σ= Σ1
- F = F1 ∪ {qs}
遷移関数 δ は次のように定義します。
例
語00または11を受理する、次のオートマトン A1 を考えます。
言語 L(A1) のクリーネ閉包は、00と11をいくつか並べてできるすべての語の言語です。例えば、0000、110011、11110000などです。このクリーネ閉包を受理するオートマトンは、次のようにつくります。新しい初期状態 qs をつくってもとの初期状態 q0 への ε 遷移を引き、さらに状態 q3 と q4 から状態 q0 への ε 遷移を加えます。
このオートマトンが語0000、110011、11110000を確かに受理し、例えば語1010は受理しないことを確かめられます。
参考文献
章: 正規言語の閉包性, 正規言語の和集合, 正規言語の共通部分, 正規言語の差集合, 正規言語の補集合, 正規言語の連接, 正規言語のクリーネ閉包