✖

正規言語のクリーネ閉包

正規言語 L を考えます。言語 L のクリーネ閉包もまた正規言語であることを証明します。

言語のクリーネ閉包とは

言語 L のクリーネ閉包は L∗ で表します。クリーネ閉包は、言語 L の語を有限個連接してつくれるすべての語からなります。クリーネ閉包は次のように定義できます。

L∗={a1∘a2∘⋯∘an|ai∈L,n∈N0}

ここで、∘ は連接の演算を表します。クリーネ閉包には空語 ϵ も含まれます。

手順の形式化

言語の連接の場合ととてもよく似た手順で進めます。ただし、2つの異なるオートマトンをつなぐのではなく、1つのオートマトンを自分自身につなぎます。つまり、オートマトンの受理状態から、同じオートマトンの初期状態へ ε 遷移を引きます。しかし、クリーネ閉包には空語も含まれなければなりません。どうすればよいでしょうか。初期状態を受理状態にすることも考えられます。そうするとオートマトンは空語を受理しますが、それ以外の余計な語まで受理してしまうおそれがあります。そこで、代わりに新しい初期状態をつくり、この新しい初期状態からもとの初期状態へ ε 遷移を引きます。

正規言語 L1 と、この言語を受理する次のオートマトンがあります。

A1=⟨Q1,Σ1,δ1,q0,F1⟩

次の条件を満たす非決定性オートマトン A = ⟨Q, Σ, δ, qs, F⟩ をつくります。

  • Q = Q1 ∪ {qs}
  • Σ= Σ1
  • F = F1 ∪ {qs}

遷移関数 δ は次のように定義します。

δ(q,a)={δ1(q,a)q∈Q1∧q∉F1のときδ1(q,a)q∈F1∧a≠ϵのときδ1(q,a)∪{q0}q∈F1∧a=ϵのとき{q0}q=qs∧a=ϵのとき∅q=qs∧a≠ϵのとき

例

語00または11を受理する、次のオートマトン A1 を考えます。

言語 L(A1) のクリーネ閉包は、00と11をいくつか並べてできるすべての語の言語です。例えば、0000、110011、11110000などです。このクリーネ閉包を受理するオートマトンは、次のようにつくります。新しい初期状態 qs をつくってもとの初期状態 q0 への ε 遷移を引き、さらに状態 q3 と q4 から状態 q0 への ε 遷移を加えます。

このオートマトンが語0000、110011、11110000を確かに受理し、例えば語1010は受理しないことを確かめられます。

参考文献

章: 正規言語の閉包性, 正規言語の和集合, 正規言語の共通部分, 正規言語の差集合, 正規言語の補集合, 正規言語の連接, 正規言語のクリーネ閉包