• 言語上の演算 正規表現 (正則表現, Regular Expression) • 任意の言語 M, N, P に対して、(M N )P = M (N P ) - 和:集合の和と同じ が成り立つ L ∪ M = {w | w ∈ L または w ∈ M } • 証明:文字列 x, y, z に対して (xy)z = x(yz) が成り立 - 連接: • オートマトン:言語を定義する機械 つことから証明できる L M = {w | w = x y, x ∈ L, y ∈ M } • 正規表現:言語を記号列で定義 (L M は L.M とも書く) - 記述しやすい (ユーザフレンドリ) • 証明: i に関する帰納法で示す - ベキ: • 例:01∗ + 10∗ - i = 0 のときは明らか L0 = {ε}, L1 = L, Lk+1 = L.Lk - UNIX の grep コマンド - i > 0 のとき、 - クリーネ閉包: - UNIX の lex, flex ツールの入力の記述 L∗ = ∞ [ Li 左辺=(M M i−1)M j = M (M i−1M j ) = M (M i+j−1) i=0 • 問:∅0, ∅i, ∅∗ はどんな集合? 1 = 右辺 • 例:0 と 1 が交互に現われる文字列全体を表す正規表現 - ε は正規表現で、L(ε) = {ε} (01)∗ + (10)∗ + 0(10)∗ + 1(01)∗ - ∅ は正規表現で、L(∅) = { } • w ∈ M ∗ ならば w ∈ M ∗M ∗ は、ε ∈ M ∗ より明らか • 演算の優先順序 • 帰納:E, F が正規表現のとき、 • w ∈ M ∗M ∗ ならば w ∈ M ∗ を証明する • ∗, ., + (結合の強い方から順に) - (E) は正規表現で、L((E)) = L(E) - E+F は正規表現で、L(E+F ) = L(E) ∪ L(F ) - E.F は正規表現で、L(E.F ) = L(E).L(F ) - w ∈ M ∗M ∗ とすると、w ∈ M iM j を満たす i, j が存 • 例: 在する 01∗ + 1 は (0(1∗)) + 1 を表す - p.3 の性質より w ∈ M i+j であるから、w ∈ M ∗ - E ∗ は正規表現で、L(E ∗) = (L(E))∗ 4 り立つ 言語 M に対して M ∗M ∗ = M ∗ を示せば十分である。 (ε + 1)(01)∗(ε + 0) a は正規表現で、L(a) = {a} • 任意の正規表現 E に対して、L(E ∗E ∗) = L(E ∗) が成 • 証明: L(E ∗E ∗) = (L(E))∗.(L(E))∗ より、任意の 別の表現も可能 - a ∈ Σ のとき、 3 2 • 正規表現 E とそれが表す集合 L(E) の再帰的定義 基底: • 任意の言語 M に対して、M iM j = M i+j が成り立つ 5 6 • 定理 3.4: 任意の DFA A = (Q, Σ, δ, q0, F ) につい て、L(R) = L(A) を満たす正規表現 R が存在する 有限オートマトンと正規表現 (n) の和 (ただし、j は全ての受理状態) で与えられる - 証明:A の状態を {1, 2, . . . , n}、初期状態を 1 とする • 有限オートマトンと正規表現の等価性の証明手順 (k) • Rij が分かれば、L(R) = L(A) を満たす R は、R1j - A の状態 i から j に至る経路 (文字列) で、k より大きな (k) 状態を経由しない文字列全体を表す正規表現を Rij で表す (k) • Rij の k に関する再帰的定義 - 基底: i 6= j かつ δ(i, a) = j を満たす a を a1, a2, . . . , am と するとき、 (0) Rij = a1 + a2+ · · · +am (0) ただし、m = 0 のとき、Rij =∅ i = j かつ δ(i, a) = j を満たす a を a1, a2, . . . , am と するとき、 (0) Rij = a1 + a2+ · · · +am + ε 7 8 9 • 以降で使う、正規表現の簡単化の規則 • 例:次の DFA が認識する言語を表す正規表現を構成す (k) • Rij の k に関する再帰的定義 (続き) る - (S + T )R=SR + T R - 帰納: (k) (k−1) Rij = Rij (k−1) + Rik - R(S + T )=RS + RT - R∗(ε + R)=R∗=(ε + R)R∗ (k−1) ∗ (k−1) ) Rkj (Rkk - Ri + R∗=R∗ - (ε + R)∗ = R∗ (0) まず、Rij を求める - R + RS ∗ = RS ∗ - ε∗ = ε - ∅R = R∅ = ∅ - ∅+R = R+∅ = R 10 11 12 (2) • 次に Rij を求める (1) • 次に Rij を求める • よって、 (1) (0) (0) (0) (0) Rij = Rij + Ri1 (R11 )∗R1j (2) (1) (1) (1) (1) Rij = Rij + Ri2 (R22 )∗R2j 得られた正規表現は、 (2) R12 = 1∗0(0 + 1)∗ 13 14 • 状態消去法によるオートマトンから正規表現への変換 - ラベルを正規表現に拡張したオートマトンを考え、状 態を消去する (前回の方法より効率的) 15 • 各々の受理状態 q について、q と q0 以外の状態を全て消 • 状態 s を消去する 去する - q 6= q0 なら、対応する正規表現は (R+SU ∗T )∗SU ∗ - q = q0 なら、対応する正規表現は R∗ • 求めたい正規表現は、これらの和 16 17 18 • 例:最後の 2 文字目か 3 文字目に 1 を持つ列を受理する • 例 (続き) オートマトン 状態 C を消去し、(0 + 1)∗1(0 + 1)(0 + 1) を得る ラベルを正規表現に変更 • 例 (続き)、以上から、 (0 + 1)∗1(0 + 1)(0 + 1) + (0 + 1)∗1(0 + 1) を得る 状態 D を消去し、(0 + 1)∗1(0 + 1) を得る 状態 B を消去 19 正規表現からオートマトンへの変換 20 • 定理 3.7 の証明 (続き) • 定理 3.7: 任意の正規表現 R について、L(A) = L(R) を満たす ε-NFA が存在する - 帰納:R + S 、RS 、R∗ と等価なオートマトンは、以 21 • 例:(0 + 1)∗1(0 + 1) と等価な ε-NFA を作る 下の通り 証明:R の構成に基づいて帰納的に A を定義する - 基底:ε、∅、a と等価なオートマトンは、以下の通り 22 23 24 正規表現の代数的法則 • 分配法則 • 正規表現に関する法則の発見・検証 (機械的) - R(S + T )=RS + RT • 結合法則と交換法則 - 例:E と F を正規表現とするとき、 - (R + S)T =RT + ST - L + M =M + L E+F = F +E • 冪等法則 - L + (M + N )=(L + M ) + N を示す方法 - R + R=R - L(M N )=(LM )N - E を a に、F を b に固定する • 閉包に関する法則 - (R∗)∗=R∗ - LM 6=M L - L(a + b) = L(b + a) を自動検証する (4章) - ∅∗=ε • この手法は、+、.、∗ の演算のみを使う限り正しい。(集 - ∅ + L=L + ∅=L - ε∗=ε 合の積では成立しない。教科書 P135 の囲み記事を参 - εL=Lε=L - R+=RR∗=R∗R 照) - ∅L=L∅=∅ - R∗=R+ + ε • 単位限と零元 25 • 例: (E+F )∗ =(E ∗F ∗)∗ の証明には、(a + b)∗ と (a∗b∗)∗ の等価性を示せば十分である。 • 例: E ∗=E ∗E ∗ の証明には、a∗ と a∗a∗ の等価性を示 せば十分である。 • 問: E+F E=(E+F )E は成立するか? 28 26 27
© Copyright 2024 Paperzz