第2章 「有限オートマトン」
第2章の内容
2.1 定義
2.2 正規集合の演算 2.3 Nerode の定理
2.4 非決定性の有限オートマトン 2.5 正規表現と正規集合
2.6 順序機械と状態最小化
2.1 定義
a
1a
2a
iq q
ヘッド テープ
有限オートマトン
M = (K, Σ, δ, q0, F) K = {q0, q1, …, qn} : 状態の集合
Σ= {a, b, …, c} : 文字の集合(アルファベット)
q0 : 初期状態
δ : 遷移関数 K×Σ→ K
F : 受理状態の集合( K の部分集合)
(1) δ(q, e) = q (q K)∈
(2) δ(q, ax) =δ(δ(q, a), x) (q K, a Σ, x Σ∈ ∈ ∈ *)
文字列 w に対して δ(q0, w) は,その文字列を読んだときの オートマトンの状態を表す。
δ(q0, w) = p ∈ F であるとき, M は w を受理するという。
M が受理する文字列全体: L(M) ={w | δ(q0, w) ∈ F}
オートマトンによって受理される集合を正規言語という。
定義つづき
遷移関数を次のように拡張する。
a b
b a
a,b
q0 q1
q2 δ(q0, aba) = δ(δ(q0, a), ba)
= δ(q1, ba)
= δ(d(q1, b), a) = δ(q0, a)
= q1 ∈ F
状態遷移図(図2)
状態遷移
L(M) = {a(ba)n | n 0}≧
オートマトンの例( p8 )
2.2 正規集合の演算
アルファベット
Σ上の正規集合の族
R (Σ) = {L | Lは正規言語
}は集合演算∪
, , ∩ ̄のもとでブール代数をなす
R (Σ)L1 L2
補題 2.1
L
を受理するオートマトンを
M=(K, Σ, δ, q0,F)とするとき,
M=(K, Σ, δ, q0, K-F)とすると
L(M) = L(M)となる
.補題
2.1正規集合
Lの補集合
L =Σ*-
Lは正規集合
証明
L1, L2 Σ * ⊆
を正規集合とする。
(1) L1∪ L2
は正規集合である。
(2) L1∩ L2
は正規集合である。
L1 = L(M1) 、 M1 = (K1, Σ, δ1, q01, F1) とし、 L2 に対し ても M2 を定義する。 M1, M2 から次の遷移関数 d と 受理状態 F をつくる。
δ = ((q1, q2), a) = (δ1(q1, a), δ2(q2, a))
(q1∈K1, q2∈K2, a Σ)∈ F = F1×K2∪K1×F2
補題 2.2
補題
2.2証明
(1) について証明する。δ = ((q1, q2), e) = (δ1(q1, e), δ2(q2, e)) = (q1, q2) 任意の q1∈K1, q2∈K2 に対して,
数学的帰納法のベースステップ
δ = ((q1, q2), x) = (δ1(q1, x), δ2(q2, x)) ( 仮定 |x| k)≦ δ((q1, q2), ax) = δ(δ((q1, q2), a), x)
= δ((δ1(q1, a), δ2(q2, a)), x)
= (δ1(δ1(q1, a), x), δ2(δ2(q2, a), x))
= (δ1(q1, ax), δ2(q2, ax))
定義より
帰納法の仮定 帰納法の仮定 定義より
証明つづき
x L(M) δ((q∈ ⇔ 01, q02), x) F∈
⇔ (δ1(q01, x), δ2(q02, x)) F∈ 1×K2∪K1×F2
⇔ δ1(q01, x) F∈ 1 または δ2(q02, x) F∈ 2
⇔ x L(M∈ 1) L(M∪ 2) (2) の証明は省略
証明つづき
(1) のときと、終状態の条件が違うだけ。
2.3 Nerode の定理
Σ* 上の関係 R は、
xRy ⇒ 任意の z Σ* ∈ に対して xzRyz を満たすとき右不変であるという。
関係 R は、 R による同値類の数が有限で
あるとき、有限指数であるという。
次の3つは同等である
.(1)
集合
L Σ* ⊆は正規である。
(2) L
はある有限指数で右不変な同値関係
R
による同値類の和として表される。
(3)
関係 ≡ は有限指数である。ただし≡
は
x y ≡ ⇔
任意の
z Σ* ∈に対して
xz, yz L ∈
であるか
xz, yz L ∈である
。
定理 2.4 ( Nerode の定理)
定理
2.4L
L L
「 xz L ∈ と yz L ∈ が同等である」の意
L = L(M) 、 M=(K, Σ, δ, q0, F) とし、関係 R を xRy δ(q⇔ 0, x) =δ(q0, y)
と定義すると、明らかに R は有限指数の同値関係である。
( L が R の同値類の和として表されることもほとんど自明)
任意の x, y に対して δ(q, xy)=δ(δ(q, x), y) であるので xRy δ(q⇒ 0, x)= δ(q0, y)
⇒ δ(δ(q0, x), z) = δ(δ(q0, y), z)
⇒ δ(q0, xz)= δ(q0, yz)
⇒ xzRyz より、 R は右不変である。
証明 (1) (2) ⇒
あとはRが右不変であることをいえばよろしい
(2) (3)⇒ xRy xzRyz (z Σ*) xz L yz L⇒ ∈ ⇒ ∈ ⇔ ∈
⇒ x y ≡ 。 よって≡は有限指数。
(3) (1)⇒ 同値関係≡の x を代表元とする同値類を [x] で表す。
K’={[x] | x Σ*}∈ δ’([x], a) = [xa]
q’0 = [ε]
F’ = {[x] | x L}∈
とすると δ’(q’0, x) =δ’([ε], x) = [εx] = [x] であるので x L(M’) [x] F’ ∈ ⇔ ∈ ⇔ x L∈
証明 (2) ⇒ (3) 、 (3) ⇒ (1)
L L
L
ゆえに L(M’) = L である。L は正規ってこと
Nerode
の定理は、ある言語
Lが正規で ない ことを示すときに有効な道具となる。
Nerode
の定理は、ある言語
Lが正規で ない ことを示すときに有効な道具となる。
Σ={a, b}
上の言語を
L={anbn | n 0} ≧とする。
L
を正規と仮定すると、
ai≡ajとなる整数
i, j (i<j)が存在し、≡は右不変であるので
aibi≡ajbi
となるはずである。
ところがこれは成立しないので矛盾である。
すなわち、
Lは正規でない。
例 2.2
L
L L
非決定性のオートマトンとは
M=(K, Σ, δ, Q0, F)のことである。ただし
Q0⊂Kで
δは
K×Σから
2Kへの関数である。その他の要素は決定性と同 様。
2.4 非決定性の有限オートマトン
これまでのオートマトンは、文字
aと状態
qに対して
δ(q, a)は一意に定まった。このような
オートマトンを決定性であるという。
非決定性のオートマトン
非決定性の遷移関数の定義域を次のようにして
K×Σから
K×Σ*へ拡張する。
δ(q, e) = {q}
δ(q, ax) =
∪
δ(p, x) (q K, a Σ, x Σ*)∈ ∈ ∈p∈δ(q, a)
これはさらに
2K×Σ*に拡張される。
δ(S, x) =
∪
δ(q, x)q S∈
そして
, x Σ* ∈が
Mによって受理されるとは、
δ(Q , x) F ≠Φ ∩
であることをいう。
遷移関数と受理状態
b q1 q1
q0 b
a,b
例えば abb に対しては δ(q0, abb) = δ(q0, bb)
= δ(q0,b) δ(q∪ 1,b)
= {q0} {q∪ 1} {q∪ 2}
= {q0, q1, q2} となり q2∈F であるから abb L(M) ∈ である。
例 2.3
非決定性有限オートマトンの状態図
定義より、決定性の有限オートマトンは |δ(q, a)| = 1 であるような非決定性オートマトンの特別な場合 である。しかしながらこれらのオートマトンの能力には差は ないことが示される。
定義より、決定性の有限オートマトンは |δ(q, a)| = 1 であるような非決定性オートマトンの特別な場合 である。しかしながらこれらのオートマトンの能力には差は ないことが示される。
L Σ* ⊆ が正規であるための必要十分条件は, L が
非決定性の有限オートマトンによって受理されること である。
任意の非決定性の M に対して、 L(M) = L(M’) となる
定理 2.5
定理
2.5証明の方針
K の任意の部分集合に1つの状態を割り当て、
それらに対して次の決定性の M’ をつくる。
K’ = 2K
δ’(S, a) =
∪
δ(q, a)q S∈
q’0 = Q0
F’ ={R | R K’ ∈ かつ R F≠Φ}∩
このオートマトンは M の状態の集合を1つの状態とみ なして ( {q1, q2,…, qk} = p という具合に ) 書き直しただけ であり、
L(M) = L(M’) が成立することはすぐに分かる。
定理 2.5 の証明
非決定性の有限オートマトン M=(K, Σ, δ, Q0, F) を考える。
ポイント!
例 2.3 の非決定性オートマトン M に対して、証明 の方法に従って M’ を構成すると以下のようにな
るK={Φ, {q. 0}, {q1}, {q2}, {q0, q1}, {q0, q2}, {q1, q2}, {q0, q1, q2}}
q’0={q0}
F={{q2},{q0, q2}, {q1, q2}, {q0, q1, q2}}
例 2.4
b
a {q0} a
{q0, q1, q2} b {q0, q2} a
b a
b
{q0} a
{q2} a,b b
b
2.5 正規表現と正規集合
この節で分かること
正規表現の(数学的な)定義と意味づけ
正規表現は文字列処理において重要な概念
UNIX システムやプログラミング言語
( Perl 、 Ruby 等)で用いられる正規表現は(実 用的に)拡張されている
有限オートマトンと正規表現とが、
言語を定義する能力において同等である
正規表現で定義される言語Lを受理する 有限オートマトンが存在する
その逆もいえる
Unix 等における正規表現
ファイル名の正規表現
> rm
*
.txt> cp Important[0-9].doc
検索ツール Grep の正規表現
> grep –E “for.+(256|CHAR_SIZE)”
*
.c
プログラミング言語 Perl の正規表現
$line = m|^http://.+\.jp/.+$|
正規表現の定義
アルファベット
Σ上の正規表現とは
A={), (, f,
・
, +, *}を用いて次のように定義され
る。
(1) φ と Σ の要素は正規表現である
(2) α と β が正規表現ならば (α ・ β) も正規表現である
(3) α と β が正規表現ならば (α+β) も正規表現である
(4) α が正規表現ならば α* も正規表現である
(5) 上から導かれるものだけが正規表現である
例:
(a・
(a+b)*)
正規表現を
Σ*の部分集合に写像する
(i) ||φ|| =φ
(ii) a Σ∈ に対して ||a|| = {a}
(iii) 正規表現 α,β に対して ||(α ・ β)|| = ||α|| ・ ||β||
(iv) 正規表現 α,β に対して ||(α+β)|| = ||α||+||β||
(v) 正規表現 α に対して ||α*|| = ||α||*
例:
||(a ・ (a+b)*)||
= {ax | x {a,b}*}∈
正規表現の意味づけ
a q
q0 1
b
a,b
定理 2.10 (正規表現→正規集合)
補題
2.2(1) ( 2.2節より、和
L1∪L2は正規集 合)
補題
2.6(空集合は正規集合)
補題
2.7(任意の一文字は正規集合)
補題
2.8(積
L1・ L2は正規集合)
補題
2.9(閉包
L*は正規集合)
定理 2.12 (正規集合→正規表現)
補題
2.11 ( ||αij(k)|| = Rij(k))
割と簡単
結構たいへん
2.5 節の構成(同等の証明)
例 2.7
図
2.9の有限オートマトンに対する正規表現
γ=α11(3) + α13(3)
α11(3) = α11(2) + α13(2)・ (α33(2))* ・ α31(2)
α11(2) = α11(1) + α12(1)・ (α22(1))* ・ α21(1)
α11(1) = α11(0) + α11(0)・ (α11(0))* ・ α11(0)
=(a+φ*)+(a+φ*) ・ (a+φ*)* ・ (a+φ*) =a*
α12(1) = α12(0) + α11(0)・ (α11(0))* ・ α12(0) = b+(a* ・ b) α22(1) = α22(0) + α21(0)・ (α11(0))* ・ α12(0) = a ・ a* ・ b α21(1) = α21(0) + α21(0)・ (α11(0))* ・ α11(0) = a ・ a*
・・・
2.6 順序機械と状態最小化
atcgaatccg...
atcgaatccg...
オートマトン有限 オートマトン有限
YesYes or NoNo
atcgaatccg...
atcgaatccg...
順序機械順序機械
00101100010...
00101100010...
順序機械とは
順序機械の概念図
q q
ヘッド
a
1a
2a
i入力テープ
b
1b
2b
i出力テープ
順序機械の数学的定義
順序機械は、 5 つ組 S=(K,Σ, ,δ,λ) ⊿
K
: 状態の(空でない)集合
Σ
: 入力アルファベット
⊿: 出力アルファベット
δ
: 遷移関数
K×Σ K→(
K×Σ* K→)
λ
: 出力関数
K×Σ→⊿(
K×Σ*→⊿*)
(本当はスタート地点を表す
q0もいる)
λ(q,ε)=ε
(
q K∈)
λ(q,ax)=λ(q,a)λ(δ(q,a), x)(
q K, a Σ, x Σ∈ ∈ ∈*
)
例 2.8 (図 2.11 )
q0
q3
q5
q1 q2
q4 0/0
1/1
1/1 0/0
0/0 0/0
0/0 1/0 0/0
1/0
1/0
1/1
λ(q0, 011)
=λ(q0, 0)λ(δ(q0,0), 11)
= 0λ(q4, 11)
= 0λ(q4, 1)λ(δ(q4,1), 1)
= 01λ(q5, 1)
= 010
一般順序機械
一般順序機械とは
順序機械の出力関数を
K×Σ→⊿*
に拡張したもの
一般順序機械
S = (K,Σ, ,δ,λ) ⊿に対して
S(x) =λ(q0, x) (x Σ*)∈
gsm 写像
L Σ*⊆
に対して
S(L) = {λ(q0, x) | x L}∈
語 x の S による変換
Σ* 上の言語から⊿ * 上の言語への翻訳を意味する
同値・等価・既約
Si=(Ki,Σ, ,δ⊿ i,λi) (i=1,2)
について
状態
p K∈ 1と
q K∈ 2は、任意の
xに対して
λ1(p, x) =λ2(q, x)であるとき同値といい
p q≡
とかく
( p q ≡ ならば δ1(p,x) =δ2(q,x) )S1
と
S2は任意の
p K∈ 1に対して
p q ≡となる
q K∈ 2が存在し、その逆の場合も成り立つとき
等価であるといい
S1≡S2とかく
S=(K,Σ, ,δ,λ) ⊿
は
任意の
p, q K ∈に対して
p q ≡ならば
p=qで あるとき既約であるという
補題 2.13
定理 2.14
定理
2.14[p]
を ≡ による
pを含む同値類として、
これを状態とする順序機械を構成する
(略:教科書
p25) 証明
任意の順序機械
Sに対して
S S’ ≡と
なる 既約な順序機械
S’が存在する
定理 2.15
定理
2.15証明
既約な順序機械は、それと等価な順序機械 のうちで、状態数が最小である
ほぼ自明
p
既約な
S qr
S’
|K|
>
|K’|p≡r, q≡r p≡q
⇒
順序機械の状態を最小にする手順
等価で既約な S’ を作ればよい
定理
2.14 →既約なものが存在することを保証
k 同値
λ(p,x)=λ(q,x)
がすべての
|x| k≦なる
x Σ* ∈に 対して成り立つとき、
pと
qは
k同値であ るといい
p q≡とかく
Ck
を ≡ による
Kの同値類の集合とする
k
k
定理 2.16
定理
2.16順序機械 S=(K,Σ, ,δ,λ) ⊿ に対して次の関係が成立する 1. p q ≡ であるための必要十分条件は、 p q ≡ かつ
任意の a Σ∈ に対して δ(p,a) δ(q,a) ≡ となること
2. Ck+1=Ck ならば j k ≧ なるすべての j に対して Ck=Cj 3. Ck+1=Ck であれば、 p q ≡ となる必要十分条件は p q≡ 4. |C1|=1 ならば、 C2 = C1
5. n=|K| 2 ≧ ならば、 Cn = Cn-1
k+1 k
k
k
k=1,2,…,n の順に C を計算していくと、必ず C = C となる
k=1,2,…,n の順に C を計算していくと、必ず C = C となる
例 2.9
q0
q3
q5
q1 q2
q4 0/0
1/1
1/1 0/0
0/0 0/0
0/0 1/0 0/0
1/0
1/0
1/1
p0 p2
p3 p1
0/0
0/0 0/0
0/0
1/1 1/1
1/0 1/0
変換
有限オートマトンの状態最小化のし かた
有限オートマトン
Mに等価で、状態数が最 小
Nerode の定理より、同値関係≡のもとで同値類を
状態にもつ有限オートマトン M’
状態を最小化する手順
定理 2.17 (定理 2.16 とほぼ同じ)による
具体的には
離れ小島になっている状態を削除
同値関係≡による同値類 Ck を計算する ここで関係≡は
p q 任意の |x| k なる x Σ* に対して
L
k k k
例 2.10
q0 q3
q5
q1 q2
q4
a
a
a
a
a b
b
b
b b
a b
a p
p0 1
p2
b a b
a,b
変換