Automata-theory-quick-guide
オートマトン理論の紹介
オートマトン-それは何ですか?
「オートマタ」という用語は、ギリシャ語の「αὐτόματα」に由来し、「自己作用」を意味します。 オートマトン(複数のオートマトン)は、あらかじめ決められた一連の操作を自動的に実行する抽象的な自走式コンピューティングデバイスです。
有限数の状態を持つオートマトンは、 Finite Automaton (FA)または Finite State Machine (FSM)と呼ばれます。
有限オートマトンの正式な定義
オートマトンは5タプル(Q、∑、δ、q〜0〜、F)で表すことができます。ここで、
- Q は有限状態のセットです。
- ∑ は、オートマトンの alphabet と呼ばれる有限のシンボルセットです。
- *δ*は遷移関数です。
- * q〜0〜*は、入力が処理される初期状態です(q〜0〜∈Q)。
- F は、Qの最終状態の状態です(F⊆Q)。
関連用語
アルファベット
- 定義-*アルファベット*は、シンボルの有限セットです。
- 例-∑ = \ {a、b、c、d}は*アルファベットセット*で、「a」、「b」、「c」、「d」は*記号*です。
ひも
- 定義-*文字列*はaから取られたシンボルの有限シーケンスです。
- 例-「cabcad」はアルファベットセットの有効な文字列です∑ = \ {a、b、c、d}
ひもの長さ
- 定義-文字列に存在するシンボルの数です。 ( | S | で示されます)。
- 例-
- S = 'cabcad’の場合、| S | = 6
- | S | = 0の場合、それは*空の文字列*(*λ*または*ε*で示される)と呼ばれます
クリーネスター
- Definition -Kleene star、 ∑ は、記号または文字列のセットの単項演算子 *∑ で、λ*を含む *∑ を超えるすべての可能な長さのすべての可能な文字列の無限集合を与えます。 。
- 表現-∑ * = ∑〜0〜∪∑〜1〜∪∑〜2〜∪……。 ここで、∑〜p〜は、長さpのすべての可能な文字列のセットです。
- 例-∑ = \ {a、b}、If * = \ {λ、a、b、aa、ab、ba、bb、………..}の場合
クリーネ閉鎖/プラス
- 定義-セット ∑ ^ + ^ は、λを除くoverを超えるすべての可能な長さのすべての可能な文字列の無限のセットです。
- 表現-∑ ^ + ^ = ∑〜1〜∪∑〜2〜∪∑〜3〜∪……。 + ∑ ^ + ^ = ∑ * − \ {λ}
- 例-∑ = \ {a、b}、If ^ + ^ = \ {a、b、aa、ab、ba、bb、………..}の場合
言語
- 定義-言語はいくつかのアルファベットalphabetの∑ *のサブセットです。 有限または無限の可能性があります。
- 例-言語が∑ = \ {a、b}で長さ2のすべての可能な文字列を取る場合、L = \ {ab、aa、ba、bb}
決定論的有限オートマトン
有限オートマトンは2つのタイプに分類することができます-
- 決定論的有限オートマトン(DFA)
- 非決定性有限オートマトン(NDFA/NFA)
決定論的有限オートマトン(DFA)
DFAでは、入力シンボルごとに、マシンが移動する状態を決定できます。 したがって、*決定的オートマトン*と呼ばれます。 状態の数が有限であるため、マシンは*確定的有限マシン*または*確定的有限オートマトン*と呼ばれます。
DFAの正式な定義
DFAは5タプル(Q、∑、δ、q〜0〜、F)で表すことができます。
- Q は有限状態のセットです。
- ∑ は、アルファベットと呼ばれる有限の記号セットです。
- *δ*は遷移関数です。δ:Q×∑→Q
- * q〜0〜*は、入力が処理される初期状態です(q〜0〜∈Q)。
- F は、Qの最終状態の状態です(F⊆Q)。
DFAのグラフィカル表現
DFAは、*状態図*と呼ばれる有向グラフで表されます。
- 頂点は状態を表します。
- 入力アルファベットのラベルが付いた弧は、遷移を示します。
- 初期状態は、空の単一の着信アークによって示されます。
- 最終状態は二重丸で示されます。
例
決定論的有限オートマトンを→
- Q = \ {a、b、c}、
- ∑ = \ {0、1}、
- q〜0〜= \ {a}、
- F = \ {c}、および
次の表に示す遷移関数δ-
Present State | Next State for Input 0 | Next State for Input 1 |
---|---|---|
a | a | b |
b | c | a |
c | b | c |
そのグラフィカルな表現は次のようになります-
非決定性有限オートマトン
NDFAでは、特定の入力シンボルに対して、マシンはマシン内の状態の任意の組み合わせに移動できます。 言い換えれば、機械が移動する正確な状態を判断することはできません。 したがって、*非決定的オートマトン*と呼ばれます。 状態の数が有限であるため、マシンは*非決定性有限マシン*または*非決定性有限オートマトン*と呼ばれます。
NDFAの正式な定義
NDFAは5タプル(Q、∑、δ、q〜0〜、F)で表すことができます。
- Q は有限状態のセットです。
- ∑ は、アルファベットと呼ばれる有限の記号セットです。
- *δ*は遷移関数です。ここで、δ:Q×∑→2 ^ Q ^ +(ここでは、NDFAの場合、状態からQ状態の任意の組み合わせへの遷移が発生する可能性があるため、Q(2 ^ Q ^)のパワーセットが採用されています)
- * q〜0〜*は、入力が処理される初期状態です(q〜0〜∈Q)。
- F は、Qの最終状態の状態です(F⊆Q)。
NDFAのグラフィカル表現:(DFAと同じ)
NDFAは、状態図と呼ばれる有向グラフによって表されます。
- 頂点は状態を表します。
- 入力アルファベットのラベルが付いた弧は、遷移を示します。
- 初期状態は、空の単一の着信アークによって示されます。
- 最終状態は二重丸で示されます。
例
非決定的有限オートマトンを→
- Q = \ {a、b、c}
- ∑ = \ {0、1}
- q〜0〜= \ {a}
- F = \ {c}
以下に示す遷移関数δ-
Present State | Next State for Input 0 | Next State for Input 1 |
---|---|---|
a | a, b | b |
b | c | a, c |
c | b, c | c |
そのグラフィカルな表現は次のようになります-
DFA対NDFA
次の表に、DFAとNDFAの違いを示します。
DFA | NDFA |
---|---|
The transition from a state is to a single particular next state for each input symbol. Hence it is called deterministic. | The transition from a state can be to multiple next states for each input symbol. Hence it is called non-deterministic. |
Empty string transitions are not seen in DFA. | NDFA permits empty string transitions. |
Backtracking is allowed in DFA | In NDFA, backtracking is not always possible. |
Requires more space. | Requires less space. |
A string is accepted by a DFA, if it transits to a final state. | A string is accepted by a NDFA, if at least one of all possible transitions ends in a final state. |
アクセプター、分類子、およびトランスデューサー
アクセプター(Recognizer)
ブール関数を計算するオートマトンは、*アクセプター*と呼ばれます。 アクセプターのすべての状態は、与えられた入力を受け入れるか拒否します。
分類子
*classifier* には3つ以上の最終状態があり、終了時に単一の出力を提供します。
変換器
現在の入力および/または以前の状態に基づいて出力を生成するオートマトンは、*トランスデューサ*と呼ばれます。 トランスデューサーは2種類あります-
- Mealy Machine -出力は、現在の状態と現在の入力の両方に依存します。
- ムーアマシン-出力は現在の状態のみに依存します。
DFAおよびNDFAによる受け入れ可能性
文字列は、DFA/NDFAが初期状態から開始し、文字列を完全に読み取った後に受け入れ状態(最終状態のいずれか)で終わる場合にのみ、DFA/NDFAによって受け入れられます。
文字列Sは、DFA/NDFA(Q、∑、δ、q〜0〜、F)で受け入れられます。
δ(q〜0〜、S)∈F *
DFA/NDFAが受け入れる言語 L は
*\ {S | S∈∑* およびδ*(q〜0〜、S)∈F} *
文字列S 'は、DFA/NDFA(Q、∑、δ、q〜0〜、F)で受け入れられません。
δ(q〜0〜、S ′)∉F *
DFA/NDFAで受け入れられない言語L '(受け入れられた言語Lの補数)は
*\ {S | S∈∑* およびδ*(q〜0〜、S)∉F} *
例
図1.3に示すDFAを考えてみましょう。 DFAから、許容される文字列を導出できます。
上記のDFAで受け入れられる文字列:\ {0、00、11、010、101、………..}
上記のDFAで受け入れられない文字列:\ {1、011、111、……..}
NDFAからDFAへの変換
問題文
- X =(Q〜x〜、∑、δ〜x〜、q〜0〜、F〜x〜)*を言語L(X)を受け入れるNDFAとします。 * L(Y)= L(X)*となるような同等のDFA * Y =(Q〜y〜、,,δ〜y〜、q〜0〜、F〜y〜)*を設計する必要があります。 次の手順は、NDFAを同等のDFAに変換します-
アルゴリズム
入力-NDFA
出力-同等のDFA
- ステップ1 *-指定されたNDFAから状態テーブルを作成します。
- ステップ2 *-同等のDFAの可能な入力アルファベットの下に空白の状態テーブルを作成します。
- ステップ3 *-q0でDFAの開始状態をマークします(NDFAと同じ)。
- ステップ4 *-状態の組み合わせを見つける\ {Q〜0〜、Q〜1〜、… 、Q〜n〜}可能な入力アルファベットごとに。
- ステップ5 *-入力アルファベット列の下に新しいDFA状態を生成するたびに、ステップ4を再度適用する必要があります。そうでない場合はステップ6に進みます。
- ステップ6 *-NDFAの最終状態のいずれかを含む状態は、同等のDFAの最終状態です。
例
次の図に示すNDFAについて考えてみましょう。
q | δ(q,0) | δ(q,1) |
---|---|---|
a | \{a,b,c,d,e} | \{d,e} |
b | {c} | {e} |
c | ∅ | {b} |
d | {e} | ∅ |
e | ∅ | ∅ |
上記のアルゴリズムを使用して、同等のDFAを見つけます。 DFAの状態テーブルを以下に示します。
q | δ(q,0) | δ(q,1) |
---|---|---|
[a] | [a,b,c,d,e] | [d,e] |
[a,b,c,d,e] | [a,b,c,d,e] | [b,d,e] |
[d,e] | [e] | ∅ |
[b,d,e] | [c,e] | [e] |
[e] | ∅ | ∅ |
[c, e] | ∅ | [b] |
[b] | [c] | [e] |
[c] | ∅ | [b] |
DFAの状態図は次のとおりです-
DFAの最小化
Myphill-Nerode定理を使用したDFA最小化
アルゴリズム
入力-DFA
出力-最小化されたDFA
- ステップ1 *-必ずしも直接接続されていない状態のすべてのペア(Q〜i〜、Q〜j〜)のテーブルを描画します[最初はすべてマークされていません]
- ステップ2 *-Q〜i〜∈FおよびQ〜j〜∉Fまたはその逆のDFA内のすべての状態ペア(Q〜i〜、Q〜j〜)を考慮し、それらをマークします。 [ここでFは最終状態のセットです]
- ステップ3 *-状態をマークできなくなるまでこのステップを繰り返します-
マークされていないペア(Q〜i〜、Q〜j〜)がある場合、ペア\ {δ(Q〜i〜、A)、δ(Q〜i〜、A)}が何らかの入力に対してマークされている場合にマークしますアルファベット。
- ステップ4 *-マークされていないすべてのペア(Q〜i〜、Q〜j〜)を結合し、それらを縮小DFAで単一の状態にします。
例
アルゴリズム2を使用して、以下に示すDFAを最小化します。
- ステップ1 *-すべての状態のペアのテーブルを描画します。
a | b | c | d | e | f | |
a | ||||||
b | ||||||
c | ||||||
d | ||||||
e | ||||||
f |
- ステップ2 *-状態ペアをマークします。
a | b | c | d | e | f | |
a | ||||||
b | ||||||
c | ✔ | ✔ | ||||
d | ✔ | ✔ | ||||
e | ✔ | ✔ | ||||
f | ✔ | ✔ | ✔ |
- ステップ3 *-状態ペアを一時的に緑色のチェックマークでマークしようとします。 「a」と「f」の状態に1を入力すると、それぞれ「c」と「f」の状態になります。 (c、f)はすでにマークされているため、ペア(a、f)をマークします。 ここで、「b」と「f」の状態に1を入力します。それぞれ「d」と「f」の状態になります。 (d、f)はすでにマークされているため、ペア(b、f)をマークします。
a | b | c | d | e | f | |
a | ||||||
b | ||||||
c | ✔ | ✔ | ||||
d | ✔ | ✔ | ||||
e | ✔ | ✔ | ||||
f | ✔ | ✔ | ✔ | ✔ | ✔ |
ステップ3の後、マークされていない状態の組み合わせ\ {a、b} \ {c、d} \ {c、e} \ {d、e}があります。
\ {c、d} \ {c、e} \ {d、e}を\ {c、d、e}に再結合できます
したがって、2つの結合状態-\ {a、b}および\ {c、d、e}が得られました
したがって、最終的な最小化DFAには、3つの状態\ {f}、\ {a、b}および\ {c、d、e}が含まれます。
等価定理を使用したDFA最小化
XとYがDFAの2つの状態である場合、これらの2つの状態を区別できない場合は、それらを結合して\ {X、Y}にすることができます。 少なくとも1つの文字列Sがある場合、δ(X、S)とδ(Y、S)の一方が受け入れ、もう一方が受け入れないという2つの状態は区別できます。 したがって、DFAは、すべての状態が区別可能な場合にのみ最小になります。
アルゴリズム3
ステップ1 *-すべての状態 *Q は2つのパーティションに分割されます-最終状態*および*非最終状態*であり、 P〜0〜で示されます。 パーティション内のすべての状態は0 ^ th ^に相当します。 カウンタ *k を取得し、0で初期化します。
ステップ2 *-kを1増やします。 P〜k〜の各パーティションについて、kで区別可能な場合、P〜k〜の状態を2つのパーティションに分割します。 このパーティションXおよびY内の2つの状態は、*δ(X、S)*および*δ(Y、S)*が(k-1)識別可能な入力 *S がある場合、k識別可能です。
- ステップ3 *-P〜k〜≠P〜k-1〜の場合、ステップ2を繰り返し、それ以外の場合はステップ4に進みます。
- ステップ4 *-k ^ th ^の同等なセットを結合し、それらを還元DFAの新しい状態にします。
例
次のDFAを考えてみましょう-
q | δ(q,0) | δ(q,1) |
---|---|---|
a | b | c |
b | a | d |
c | e | f |
d | e | f |
e | e | f |
f | f | f |
上記のアルゴリズムを上記のDFAに適用してみましょう-
- P〜0〜= \ {(c、d、e)、(a、b、f)}
- P〜1〜= \ {(c、d、e)、(a、b)、(f)}
- P〜2〜= \ {(c、d、e)、(a、b)、(f)}
したがって、P〜1〜= P〜2〜。
縮小DFAには3つの状態があります。 削減されたDFAは次のとおりです-
Q | δ(q,0) | δ(q,1) |
---|---|---|
(a, b) | (a, b) | (c,d,e) |
(c,d,e) | (c,d,e) | (f) |
(f) | (f) | (f) |
ムーア機とミーリー機
有限オートマトンには、各遷移に対応する出力がある場合があります。 出力を生成する有限状態マシンには2種類あります-
- ミーリーマシン
- ムーア機
ミーリーマシン
Mealy Machineは、出力が現在の状態と現在の入力に依存するFSMです。
6タプル(Q、∑、O、δ、X、q〜0〜)で記述できます。
- Q は有限状態のセットです。
- ∑ は、入力アルファベットと呼ばれる有限の記号セットです。
- O は、出力アルファベットと呼ばれる記号の有限セットです。
- *δ*は入力遷移関数です。δ:Q×input→Q
- X は出力遷移関数です。X:Q×∑→O
- * q〜0〜*は、入力が処理される初期状態です(q〜0〜∈Q)。
Mealyマシンの状態テーブルは以下に示されています-
現状
次の状態
入力= 0
入力= 1
状態
出力
状態
出力
→ a
b
x1
c
x1
b
b
x2
d
x3
c
d
x3
c
x1
d
d
x3
d
x2
上記のMealy Machineの状態図は-
ムーア機
ムーアマシンは、出力が現在の状態のみに依存するFSMです。
Mooreマシンは、6タプル(Q、∑、O、δ、X、q〜0〜)で記述できます。
- Q は有限状態のセットです。
- ∑ は、入力アルファベットと呼ばれる有限の記号セットです。
- O は、出力アルファベットと呼ばれる記号の有限セットです。
- *δ*は入力遷移関数です。δ:Q×input→Q
- X は出力遷移関数です。X:Q→O
- * q〜0〜*は、入力が処理される初期状態です(q〜0〜∈Q)。
ムーア機械の状態表を以下に示します-
現状
次の状態
出力
入力= 0
入力= 1
→ a
b
c
x2
b
b
d
x1
c
c
d
x2
d
d
d
x3
上記のムーア機械の状態図は-
Mealy Machine vs. ムーア機
次の表は、MealyマシンとMooreマシンを区別するポイントを強調しています。
Mealy Machine | Moore Machine |
---|---|
Output depends both upon the present state and the present input | Output depends only upon the present state. |
Generally, it has fewer states than Moore Machine. | Generally, it has more states than Mealy Machine. |
The value of the output function is a function of the transitions and the changes, when the input logic on the present state is done. | The value of the output function is a function of the current state and the changes at the clock edges, whenever state changes occur. |
Mealy machines react faster to inputs. They generally react in the same clock cycle. | In Moore machines, more logic is required to decode the outputs resulting in more circuit delays. They generally react one clock cycle later. |
ムーア機からミーリー機
アルゴリズム4
入力-ムーア機械
出力-Mealy Machine
- ステップ1 *-空のMealy Machine遷移テーブル形式を使用します。
- ステップ2 *-すべてのMoore Machineの遷移状態をこのテーブル形式にコピーします。
- ステップ3 *-現在の状態と対応するMoore Machine状態テーブルの出力を確認します。状態Q〜i〜の出力がmの場合、Q〜i〜が次の状態で現れる場所であればどこでも、それをMealy Machine状態テーブルの出力列にコピーします。
例
私たちは次のムーアマシンを考えてみましょう-
現状
次の状態
出力
a = 0
a = 1
→ a
d
b
1
b
a
d
0
c
c
c
0
d
b
a
1
次に、アルゴリズム4を適用してMealy Machineに変換します。
- ステップ1および2 *-
現状
次の状態
a = 0
a = 1
状態
出力
状態
出力
→ a
d
b
b
a
d
c
c
c
d
b
a
- ステップ3 *-
現状
次の状態
a = 0
a = 1
状態
出力
状態
出力
> a
d
1
b
0
b
a
1
d
1
c
c
0
c
0
d
b
0
a
1
MealyマシンからMooreマシン
アルゴリズム5
入力-Mealy Machine
出力-ムーア機械
- ステップ1 *-Mealyマシンの状態テーブルで利用可能な各状態(Q〜i〜)の異なる出力の数を計算します。
ステップ2 *-Qiのすべての出力が同じ場合、状態Q〜i〜をコピーします。 n個の個別の出力がある場合、Q〜i〜をQ〜in〜としてn個の状態に分割します。ここで、 *n = 0、1、2 …….
- ステップ3 *-初期状態の出力が1の場合、出力に0を与える新しい初期状態を最初に挿入します。
例
私たちは次のミーリーマシンを考えてみましょう-
現状
次の状態
a = 0
a = 1
次の状態
出力
次の状態
出力
→ a
d
0
b
1
b
a
1
d
0
c
c
1
c
0
d
b
0
a
1
ここでは、状態「a」と「d」はそれぞれ1と0の出力のみを提供するため、状態「a」と「d」を保持します。 ただし、「b」と「c」は異なる出力(1と0)を生成します。 したがって、 b を* b〜0〜、b〜1〜に分割し、 *c を* c〜0〜、c〜1〜*に分割します。
現状
次の状態
出力
a = 0
a = 1
→ a
d
b1
1
b0
a
d
0
b1
a
d
1
c0
c1
C0
0
c1
c1
C0
1
d
b0
a
0
文法入門
用語の文学的意味では、文法は自然言語での会話の構文規則を示します。 言語学は、英語、サンスクリット語、北京語などの自然言語の始まり以来、文法を定義しようとしました。
形式言語の理論は、コンピューターサイエンスの分野で広く適用されます。 Noam Chomsky は、1956年にコンピューター言語の記述に効果的な文法の数学モデルを提供しました。
文法
文法 G は、正式には4タプル(N、T、S、P)として記述できます。
- N または* V〜_ [。small]#N#_〜*は、変数または非終端記号のセットです。
- T または ∑ は、ターミナル記号のセットです。
- S は開始記号と呼ばれる特別な変数で、S∈N
- P は、ターミナルおよび非ターミナルの生産ルールです。 プロダクションルールの形式はα→βです。αとβはV〜_ [。small]#N#_〜on stringsの文字列であり、αの少なくとも1つのシンボルはV〜N〜に属します。
例
文法G1-
(\ {S、A、B}、\ {a、b}、S、\ {S→AB、A→a、B→b})
ここに、
- * S、A、、および *B は非終端記号です。
- a および b は端末記号です
- S は開始記号、S∈N
- プロダクション、 P:S→AB、A→a、B→b
例
文法G2-
((\ {S、A}、\ {a、b}、S、\ {S→aAb、aA→aaAb、A→ε})
ここに、
- S および A は非終端記号です。
- a および b はターミナルシンボルです。
- *ε*は空の文字列です。
- S は開始記号、S∈N
- 生産* P:S→aAb、aA→aaAb、A→ε*
文法からの派生
文字列は、文法のプロダクションを使用して他の文字列から派生する場合があります。 文法 G に*α→β*の生成がある場合、 xαy は G の xβy を導出すると言うことができます。 この派生は次のように書かれています-
*_xαy [.sy-r]#⇒[.oxbr] ## G ### xβy_*
例
文法を考えてみましょう-
G2 =(\ {S、A}、\ {a、b}、S、\ {S→aAb、aA→aaAb、A→ε})
派生できる文字列のいくつかは-
S⇒[.underline] aA b本番を使用S→aAb
⇒a [.underline] aA bb(プロダクションaAを使用)→aAb
⇒aaa [.underline] A bbb(プロダクションaAを使用)→aAb
⇒プロダクションAを使用したaaabbb→ε
文法によって生成された言語
文法から派生できるすべての文字列のセットは、その文法から生成された言語と呼ばれます。 文法 G によって生成された言語は、
L(G)= \ {W | W∈∑ 、S [.sy-r]#⇒[.oxbr] G# *W }
- L(G1)= L(G2)の場合、文法 *G1 は文法 G2 と同等です。
例
文法がある場合
G:N = \ {S、A、B} T = \ {a、b} P = \ {S→AB、A→a、B→b}
ここで、 S は AB を生成し、 A を a に、 B を b に置き換えることができます。 ここで、受け入れられる文字列は ab のみです。つまり、
L(G)= \ {ab}
例
次の文法があると仮定します-
G:N = \ {S、A、B} T = \ {a、b} P = \ {S→AB、A→aA | a、B→bB | b}
この文法によって生成された言語-
L(G)= \ {ab、a ^ 2 ^ b、ab ^ 2 ^、a ^ 2 ^ b ^ 2 ^、………}
\ {a ^ m ^ b ^ n ^ | m≥1およびn≥1}
言語を生成する文法の構築
一部の言語を検討し、それらの言語を生成する文法Gに変換します。
例
*_問題_* -仮定、L(G)= \ {a ^ m ^ b ^ n ^ | m≥0およびn> 0}。 * L(G)*を生成する文法 *G* を見つける必要があります。
溶液
L(G)= \ {a ^ m ^ b ^ n ^ | m≥0およびn> 0}
受け入れられた文字列のセットは次のように書き換えることができます-
L(G)= \ {b、ab、bb、aab、abb、……。}
ここで、開始記号には、nullを含む任意の数の「a」が先行する少なくとも1つの「b」が必要です。
文字列セット\ {b、ab、bb、aab、abb、……。}を受け入れるために、プロダクションを取りました-
S→aS、S→B、B→bおよびB→bB
S→B→b(承認済み)
S→B→bB→bb(承認済み)
S→aS→aB→ab(承認済み)
S→aS→aaS→aaB→aab(承認済み)
S→aS→aB→abB→abb(承認済み)
したがって、L(G)のすべての文字列が、プロダクションセットによって生成された言語で受け入れられることを証明できます。
したがって、文法-
G:(\ {S、A、B}、\ {a、b}、S、\ {S→aS | B、B→b | bB})
例
*_問題_* -仮定、L(G)= \ {a ^ m ^ b ^ n ^ | m> 0およびn≥0}。 L(G)を生成する文法Gを見つける必要があります。
*_ソリューション_* -
L(G)= \ {a ^ m ^ b ^ n ^ | m> 0およびn≥0}、受け入れられる文字列のセットは次のように書き換えることができます-
L(G)= \ {a、aa、ab、aaa、aab、abb、……。}
ここで、開始記号には、少なくとも1つの「a」とそれに続くヌルを含む任意の数の「b」が必要です。
文字列セット\ {a、aa、ab、aaa、aab、abb、……。}を受け入れるために、プロダクションを取りました-
S→aA、A→aA、A→B、B→bB、B→λ
S→aA→aB→aλ→a(承認済み)
S→aA→aaA→aaB→aaλ→aa(承認済み)
S→aA→aB→abB→abλ→ab(承認済み)
S→aA→aaA→aaaA→aaaB→aaaλ→aaa(受け入れられます)
S→aA→aaA→aaB→aabB→aabλ→aab(承認済み)
S→aA→aB→abB→abbB→abbλ→abb(承認済み)
したがって、L(G)のすべての文字列が、プロダクションセットによって生成された言語で受け入れられることを証明できます。
したがって、文法-
G:(\ {S、A、B}、\ {a、b}、S、\ {S→aA、A→aA | B、B→λ| bB})
文法のチョムスキー分類
Noam Chomoskyによると、4つのタイプの文法があります-タイプ0、タイプ1、タイプ2、およびタイプ3。 次の表は、それらが互いにどのように異なるかを示しています-
Grammar Type | Grammar Accepted | Language Accepted | Automaton |
---|---|---|---|
Type 0 | Unrestricted grammar | Recursively enumerable language | Turing Machine |
Type 1 | Context-sensitive grammar | Context-sensitive language | Linear-bounded automaton |
Type 2 | Context-free grammar | Context-free language | Pushdown automaton |
Type 3 | Regular grammar | Regular language | Finite state automaton |
次の図をご覧ください。 それは文法の各タイプの範囲を示しています-
タイプ-3文法
- Type-3文法*は通常の言語を生成します。 タイプ3文法には、左側に単一の非終端記号があり、右側に単一の終端記号または単一の非終端記号が続く単一の終端記号が必要です。
プロダクションは、 X→aまたはX→aY の形式である必要があります
ここで、 X、Y∈N (非終端)
および a∈T (端末)
*S* がルールの右側に表示されない場合、ルール* S→ε*が許可されます。
例
X → ε
X → a | aY
Y → b
タイプ-2文法
- Type-2文法*は、文脈自由言語を生成します。
作品は* A→γ*の形式でなければなりません
ここで、 A∈N (非終端)
および*γ∈(T∪N)**(端末および非端末の文字列)。
これらの文法によって生成されたこれらの言語は、非決定的プッシュダウンオートマトンによって認識されます。
例
S → X a
X → a
X → aX
X → abc
X → ε
タイプ-1文法
- Type-1文法*は、状況依存言語を生成します。 作品は次の形式である必要があります
αAβ→αγβ
ここで、 A∈N (非終端)
および*α、β、γ∈(T∪N)**(端末および非端末の文字列)
文字列*α*および*β*は空でもかまいませんが、*γ*は空でない必要があります。
Sがルールの右側に表示されない場合、ルール* S→ε*が許可されます。 これらの文法によって生成された言語は、線形有界オートマトンによって認識されます。
例
AB → AbBc
A → bcA
B → b
タイプ-0文法
- Type-0文法*は、再帰的に列挙可能な言語を生成します。 プロダクションには制限がありません。 それらは、すべての正式な文法を含む任意のフェーズ構造文法です。
チューリングマシンによって認識される言語を生成します。
生成は、*α→β*の形式にすることができます。ここで、*α*は、少なくとも1つの非端末を持つ端末と非端末の文字列であり、*α*をヌルにすることはできません。 *β*は、端末と非端末の文字列です。
例
S → ACaB
Bc → acB
CB → DB
aD → Db
正規表現
- 正規表現*は、次のように再帰的に定義することができます-
- ε*は正規表現で、空の文字列を含む言語を示します。 *(L(ε)= \ {ε})
- φ*は、空の言語を示す正規表現です。 *(L(φ)= \ {})
- x は、 L = \ {x} の正規表現です
- X が言語* L(X)を表す正規表現であり、 *Y が言語* L(Y)*を表す正規表現である場合、
- X + Y は、言語* L(X)∪L(Y)に対応する正規表現です。ここで、 L(X + Y)= L(X)∪L(Y)*です。
- X . Y *は、言語 L(X)に対応する正規表現です。 L(Y)ここで L(X.Y)= L(X)。 L(Y)*
- R は、言語 L(R )に対応する正規表現です。 L(R )=(L(R))
- 1〜5のルールを何度か適用すると、それらは正規表現になります。
いくつかのREの例
Regular Expressions | Regular Set |
---|---|
(0 + 10*) | L = \{ 0, 1, 10, 100, 1000, 10000, … } |
(0*10*) | L = \{1, 01, 10, 010, 0010, …} |
(0 + ε)(1 + ε) | L = \{ε, 0, 1, 01} |
(a+b)* | Set of strings of a’s and b’s of any length including the null string. So L = \{ ε, a, b, aa , ab , bb , ba, aaa…….} |
(a+b)*abb | Set of strings of a’s and b’s ending with the string abb. So L = \{abb, aabb, babb, aaabb, ababb, …………..} |
(11)* | Set consisting of even number of 1’s including empty string, So L= \{ε, 11, 1111, 111111, ……….} |
(aa)*(bb)*b | Set of strings consisting of even number of a’s followed by odd number of b’s , so L = \{b, aab, aabbb, aabbbbb, aaaab, aaaabbb, …………..} |
(aa + ab + ba + bb)* | String of a’s and b’s of even length can be obtained by concatenating any combination of the strings aa, ab, ba and bb including null, so L = \{aa, ab, ba, bb, aaab, aaba, …………..} |
レギュラーセット
正規表現の値を表すすべてのセットは、*正規セット*と呼ばれます
レギュラーセットのプロパティ
- プロパティ1 *。 2つの正規セットの和集合は正規です。
証明-
2つの正規表現を使用してみましょう
RE〜1〜= a(aa)*およびRE〜2〜=(aa) *
したがって、L〜1〜= \ {a、aaa、aaaaa、…..}(Nullを除く奇数長の文字列)
およびL〜2〜= \ {ε、aa、aaaa、aaaaaa、…….}(Nullを含む偶数の文字列)
L〜1〜∪L〜2〜= \ {ε、a、aa、aaa、aaaa、aaaaa、aaaaaa、…….}
(Nullを含むすべての可能な長さの文字列)
RE(L〜1〜∪L〜2〜)= a* (それ自体が正規表現です)
したがって、証明。
- プロパティ2. * 2つのレギュラーセットの共通部分はレギュラーです。
証明-
2つの正規表現を使用してみましょう
RE〜1〜= a(a )およびRE〜2〜=(aa)
したがって、L〜1〜= \ {a、aa、aaa、aaaa、….}(Nullを除くすべての可能な長さの文字列)
L〜2〜= \ {ε、aa、aaaa、aaaaaa、…….}(Nullを含む偶数の文字列)
L〜1〜∩L〜2〜= \ {aa、aaaa、aaaaaa、…….}(Nullを除く偶数の文字列)
RE(L〜1〜∩L〜2〜)= aa(aa)*これは正規表現そのものです。
したがって、証明。
- プロパティ3. * レギュラーセットの補数はレギュラーです。
証明-
正規表現を取りましょう-
RE =(aa)*
したがって、L = \ {ε、aa、aaaa、aaaaaa、…….}(Nullを含む偶数の文字列)
*L* の補数は、 *L* にないすべての文字列です。
したがって、L ’= \ {a、aaa、aaaaa、…..}(Nullを除く奇数長の文字列)
RE(L ’)= a(aa)*これはそれ自体が正規表現です。
したがって、証明。
- プロパティ4. * 2つのレギュラーセットの違いはレギュラーです。
証明-
私たちは2つの正規表現を取りましょう-
RE〜1〜= a(a )およびRE〜2〜=(aa)
したがって、L〜1〜= \ {a、aa、aaa、aaaa、….}(Nullを除くすべての可能な長さの文字列)
L〜2〜= \ {ε、aa、aaaa、aaaaaa、…….}(Nullを含む偶数の文字列)
L〜1〜– L〜2〜= \ {a、aaa、aaaaa、aaaaaaa、….}
(ヌルを除くすべての奇数長のストリング)
RE(L〜1〜– L〜2〜)= a(aa)*これは正規表現です。
したがって、証明。
- プロパティ5. * レギュラーセットの反転はレギュラーです。
証明-
*L* が正規集合の場合、 *L ^ R ^* も正規であることを証明する必要があります。
みましょう、L = \ {01、10、11、10}
RE(L)= 01 + 10 + 11 + 10
L ^ R ^ = \ {10、01、11、01}
RE(L ^ R ^)= 01 + 10 + 11 + 10(通常)
したがって、証明。
- プロパティ6. * 通常のセットのクローズは通常です。
証明-
L = \ {a、aaa、aaaaa、…….}(Nullを除く奇数長の文字列)の場合
すなわち、RE(L)= a(aa) *
L* = \ {a、aa、aaa、aaaa、aaaaa、……………}(Nullを除くすべての長さの文字列)
RE(L )= a(a)
したがって、証明。
- プロパティ7. * 2つの正規セットの連結は正規です。
証明-
RE〜1〜=(0 + 1)* 0およびRE〜2〜= 01(0 + 1)*とする
ここで、L〜1〜= \ {0、00、10、000、010、……}(0で終わる文字列のセット)
およびL〜2〜= \ {01、010,011、…..}(01で始まる文字列のセット)
次に、L〜1〜L〜2〜= \ {001,0010,0011,0001,00010,00011,1001,10010、………….}
RE-(0 + 1)* 001(0 + 1)*で表すことができるサブストリングとして001を含むストリングのセット
したがって、証明した。
正規表現に関連するID
正規表現としてR、P、L、Qを考えると、次のアイデンティティが保持されます-
- ∅* =ε
- ε* =ε RR = R * R R R = R (R ) = R RR = R * R
- (PQ)* P = P(QP)*
- (a + b) =(a b ) *=(a + b ) *=(a + b ) = a (ba )
- R ∅=∅ R = R(結合の正体)
- Rε=εR = R(連結のアイデンティティ)
- ∅L = L∅=∅(連結の消滅者)
- R + R = R(べき等法)
- L(M + N)= LM + LN(左の分配法則)
- (M + N)L = ML + NL(右の分配則) ε+ RR =ε+ R R = R
アーデンの定理
有限オートマトンの正規表現を見つけるために、正規表現のプロパティとともにアーデンの定理を使用します。
*_Statement_* -
*P* と *Q* を2つの正規表現とします。
*P* にヌル文字列が含まれていない場合、 *R = Q + RP* には *R = QP* *という一意のソリューションがあります。
証明-
R = Q +(Q + RP)P [値R = Q + RPを入れた後]
Q + QP + RPP
私たちは R の値を繰り返し再帰的に配置すると、次の式が得られます-
R = Q + QP + QP ^ 2 ^ + QP ^ 3 ^…..
R = Q(ε+ P + P ^ 2 ^ + P ^ 3 ^ +…。 )
R = QP [P は(ε+ P + P2 + P3 +…。)を表すため]
したがって、証明した。
アーデンの定理を適用するための仮定
- 遷移図にNULL遷移を含めることはできません
- 初期状態は1つだけでなければなりません
方法
- ステップ1 *-初期状態がq〜1〜のn個の状態を持つDFAのすべての状態について、次の形式で方程式を作成します。
q〜1〜= q〜1〜R〜11〜+ q〜2〜R〜21〜… q〜n〜R〜n1〜+ε
q〜2〜= q〜1〜R〜12〜+ q〜2〜R〜22〜… q〜n〜R〜n2〜
…………………………
…………………………
…………………………
…………………………
q〜n〜= q〜1〜R〜1n〜+ q〜2〜R〜2n〜… q〜n〜R〜nn〜
- R〜ij〜は、 q〜i〜から q〜j〜までのエッジのラベルのセットを表し、そのようなエッジが存在しない場合は、 R〜ij〜=∅*
ステップ2 *-これらの方程式を解いて、 R〜ij〜*に関して最終状態の方程式を取得します。
問題
以下に示すオートマトンに対応する正規表現を構築します-
ソリューション-
ここで、初期状態と最終状態は* q〜1〜*です。
3つの状態q1、q2、およびq3の方程式は次のとおりです-
q〜1〜= q〜1〜a + q〜3〜a +ε(ε移動はq1が初期状態であるためです0
q〜2〜= q〜1〜b + q〜2〜b + q〜3〜b
q〜3〜= q〜2〜a
今、私たちはこれらの3つの方程式を解きます-
q〜2〜= q〜1〜b + q〜2〜b + q〜3〜b
q〜1〜b + q〜2〜b +(q〜2〜a)b(q〜3〜の値を代入)
q〜1〜b + q〜2〜(b + ab)
q〜1〜b(b + ab)*(アーデンの定理の適用)
q〜1〜= q〜1〜a + q〜3〜a +ε
q〜1〜a + q〜2〜aa +ε(q〜3〜の値を代入)
q〜1〜a + q〜1〜b(b + ab *)aa +ε(q〜2〜の値を代入)
q〜1〜(a + b(b + ab)* aa)+ε
ε(a + b(b + ab)* aa)*
(a + b(b + ab)* aa)*
したがって、正規表現は(a + b(b + ab)* aa)*です。
問題
以下に示すオートマトンに対応する正規表現を構築します-
ソリューション-
ここで、初期状態はq〜1〜で、最終状態はq〜2〜です
今、我々は方程式を書き留めます-
q〜1〜= q〜1〜0 +ε
q〜2〜= q〜1〜1 + q〜2〜0
q〜3〜= q〜2〜1 + q〜3〜0 + q〜3〜1
今、私たちはこれらの3つの方程式を解きます-
q〜1〜=ε0 *[As、εR= R]
したがって、q〜1〜= 0*
q〜2〜= 0 *1 + q〜2〜0
したがって、q〜2〜= 0* 1(0) *[アーデンの定理による]
したがって、正規表現は0* 10 *です。
REからのFAの構築
トンプソンの構築を使用して、正規表現から有限オートマトンを見つけることができます。 正規表現を最小の正規表現に減らし、これらをNFAに変換し、最終的にDFAに変換します。
いくつかの基本的なRA表現は次のとおりです-
*_ケース1_* -正規表現「a」の場合、次のFAを構築できます-
*_ケース2_* -正規表現「ab」の場合、次のFAを構築できます-
*_ケース3_* -正規表現(a + b)の場合、次のFAを構築できます-
*_ケース4_* -正規表現(a + b)*の場合、次のFAを構築できます-
方法
- ステップ1 *指定された正規表現からNull移動を使用してNFAを構築します。
- ステップ2 * NFAからNullトランジションを削除し、同等のDFAに変換します。
問題
次のRAを同等のDFA − 1(0 + 1)* 0に変換します
溶液
3つの式「1」、「(0 + 1)*」、「0」を連結します
ここで、*ε*遷移を削除します。 NDFAから*ε*遷移を削除すると、次のようになります-
RE-1(0 + 1)* 0に対応するNDFAです。 DFAに変換する場合は、第1章で説明したNDFAをDFAに変換する方法を適用してください。
ヌル移動を伴う有限オートマトン(NFA-ε)
null移動(FA-ε)のある有限オートマトンは、アルファベットセットからの入力を行った後だけでなく、入力シンボルもなしに通過します。 入力のないこの遷移は null move と呼ばれます。
NFA-εは、形式的に5タプル(Q、∑、δ、q〜0〜、F)で表されます。
- Q -状態の有限セット
- ∑ -入力シンボルの有限セット
- δ-遷移関数δ:Q×(∑∪\ {ε})→2 ^ Q ^
- * q〜0〜*-初期状態q〜0〜∈Q
- F -Qの最終状態/状態のセット(F⊆Q)。
上記の*(FA-ε)*は文字列セットを受け入れます-\ {0、1、01}
有限オートマトンからのヌル移動の削除
NDFAでは、頂点Xと頂点Yの間にbetween-移動がある場合、次の手順を使用して削除できます-
- Yからのすべての発信エッジを見つけます。
- エッジラベルを変更せずに、Xから始まるこれらすべてのエッジをコピーします。
- Xが初期状態の場合、Yも初期状態にします。
- Yが最終状態の場合、Xも最終状態にします。
問題
次のNFA-εをヌル移動なしでNFAに変換します。
溶液
- ステップ1 *-
ここで、ε遷移は* q〜1〜と q〜2〜の間であるため、 q〜1〜は *X で、* q〜f〜は *Y です。
ここで、q〜f〜からの出力エッジは、入力0および1のq〜f〜です。
- ステップ2 *-
ここで、q〜f〜からエッジを変更せずにq〜1〜からこれらのすべてのエッジをコピーし、次のFAを取得します-
- ステップ3 *-
ここで、q〜1〜は初期状態なので、q〜f〜も初期状態にします。
したがって、FAは-
- ステップ4 *-
ここでq〜f〜は最終状態なので、q〜1〜も最終状態にします。
したがって、FAは-
通常の文法のポンピング補題
定理
Lを通常の言語にします。 次に、 L のすべての文字列 w のような定数 ’c’ が存在します-
*| w | ≥c*
*w* を3つの文字列 *w = xyz* に分割できます。
- | y | > 0
- | xy | ≤c
- すべてのk≥0について、文字列xy ^ k ^ zもLにあります。
ポンピング補題の応用
ポンピング補題は、特定の言語が規則的でないことを示すために適用されます。 言語が規則的であることを示すために決して使用すべきではありません。
- L が規則的な場合、Pumping Lemmaを満たします。
- L がPumping Lemmaを満たさない場合、それは非正規です。
言語Lが正規でないことを証明する方法
- 最初に、 L が規則的であると仮定する必要があります。
- したがって、ポンピング補題は L を保持する必要があります。
- 矛盾を得るためにポンピング補題を使用します-
- * | w |のように w を選択します≥c *
- * | y |のように y を選択します≥1 *
- * | xy |のように x を選択します≤c *
- 残りの文字列を* z。*に割り当てます
- 結果の文字列が L. に含まれないように k を選択します
したがって、Lは規則的ではありません。
問題
*L = \ {a ^ i ^ b ^ i ^ | i≥0}* は規則的ではありません。
*_ソリューション_* -
- 最初に、 L は規則的であり、nは状態の数であると仮定します。
- w = _a ^ n ^ b ^ n ^ _としましょう。 したがって| w | = 2n≥n。
- 補題をポンピングすることにより、w = xyzとする(| xy | ≤n。
- x = a ^ p ^、y = a ^ q ^、およびz = a ^ r ^ b ^ n ^とします。ここで、p + q + r = n、p≠0、q≠0、r≠0です。 したがって| y | ≠0。
- k = 2とします。 次に、xy ^ 2 ^ z = a ^ p ^ a ^ 2q ^ a ^ r ^ b ^ n ^。
- as =(p + 2q + r)=(p + q + r)+ q = n + qの数
- したがって、xy ^ 2 ^ z = a ^ n + q ^ b ^ n ^。 q≠0であるため、xy ^ 2 ^ zはa ^ n ^ b ^ n ^の形式ではありません。
- したがって、xy ^ 2 ^ zはLにありません。 したがって、Lは規則的ではありません。
DFA補数
(Q、∑、δ、q〜0〜、F)が言語Lを受け入れるDFAである場合、DFAの補数は、その受け入れ状態を非受け入れ状態と交換することによって取得でき、その逆も同様です。
私たちは例を挙げて、これを以下で詳しく説明します-
このDFAは言語を受け入れます
L = \ {a、aa、aaa、…………. }
アルファベットの上
∑ = \ {a、b}
したがって、RE = a ^ + ^。
今、私たちはその受け入れ状態を非受け入れ状態と交換し、逆もまた同様になります-
DFA Accepting Complement Language L
このDFAは言語を受け入れます
Ľ= \ {ε、b、ab、bb、ba、…………… }
アルファベットの上
∑ = \ {a、b}
注-NFAを補完する場合は、最初にNFAをDFAに変換してから、前の方法のように状態を交換する必要があります。
文脈自由文法の紹介
*_Definition_* -文法ルールの有限セットで構成されるコンテキストフリー文法(CFG)は4倍*(N、T、P、S)*です。
- N は、非終端記号のセットです。
- T は、* N∩T = NULLの端末のセットです。*
- P はルールのセットです。* P:N→(N∪T)*、つまり、制作ルールの左側には *P には右コンテキストまたは左コンテキストがあります。
- S は開始記号です。
例
- 文法(\ {A}、\ {a、b、c}、P、A)、P:A→aA、A→abc。
- 文法(\ {S、a、b}、\ {a、b}、P、S)、P:S→aSa、S→bSb、S→ε
- 文法(\ {S、F}、\ {0、1}、P、S)、P:S→00S | 11F、F→00F | ε
派生ツリーの生成
派生ツリーまたは解析ツリーは、コンテキストフリーの文法から派生した文字列のセマンティック情報をグラフィカルに表す順序付けられたルート付きツリーです。
表現手法
- ルート頂点-開始記号でラベル付けする必要があります。
- 頂点-非終端記号でラベル付けされています。
- 葉-終端記号またはεでラベル付けされています。
S→x〜1〜x〜2〜……x〜n〜がCFGのプロダクションルールである場合、解析ツリー/派生ツリーは次のようになります-
派生ツリーを描くには2つの異なるアプローチがあります-
トップダウンアプローチ-
- 開始記号 S で始まります
- プロダクションを使用してツリーの葉に行きます
ボトムアップアプローチ-
- 木の葉から始まる
- 開始記号 S であるルートまで上方向に進みます
木の派生または収量
解析ツリーの派生または収量は、Nullを無視して、ツリーの葉のラベルを左から右に連結することによって取得される最終文字列です。 ただし、すべての葉がヌルの場合、派生はヌルです。
例
CFG \ {N、T、P、S}を
N = \ {S}、T = \ {a、b}、開始記号= S、P = S→SS | aSb | ε
上記のCFGから派生したものの1つは「abaabb」です
S→SS→aSbS→abS→abaSb→abaaSbb→abaabb
センテンス形式と部分派生ツリー
部分派生ツリーは、派生ツリー/解析ツリーのサブツリーであり、そのすべての子がサブツリーに含まれるか、またはいずれもサブツリーに含まれません。
例
いずれかのCFGの場合、プロダクションは-
S→AB、A→aaA | ε、B→Bb | ε
部分派生ツリーは次のようにすることができます-
部分派生ツリーにルートSが含まれている場合、それは*センテンスフォーム*と呼ばれます。 上記のサブツリーも文型です。
文字列の左端と右端の派生
- 左端の派生-左ステップの派生は、各ステップで左端の変数に生産を適用することによって得られます。
- 右端の導出-右端の導出は、各ステップで右端の変数に生産を適用することによって取得されます。
- 例 *
CFGの生産ルールのセットを
X→X + X | X* X | X | a
アルファベット\ {a}以上。
文字列 "a + a a" *の左端の派生は-
X→X + X→a + X→a + X X→a + a X→a + a * a
上記の文字列の段階的な導出は以下のように示されています-
上記の文字列 "a + a a" *の右端の派生は-
X→X X→X a→X + X a→X + a a→a + a * a
上記の文字列の段階的な導出は以下のように示されています-
左右の再帰文法
文脈自由文法 G で、 X→Xa という形式の生成物がある場合、 X は非終端記号で、 'a' は終端文字列で、* leftと呼ばれます再帰生産*。 左再帰生成を持つ文法は、*左再帰文法*と呼ばれます。
そして、文脈自由文法 G で、生産が X→aX の形式である場合、 X は非終端記号であり、 'a' は終端文字列です。 正しい再帰的生産。 正しい再帰生成を持つ文法は、 right recursive grammar と呼ばれます。
文脈自由文法のあいまいさ
文脈自由文法 G が何らかの文字列* w∈L(G)*に対して複数の派生ツリーを持つ場合、それは*曖昧な文法*と呼ばれます。 その文法から生成された文字列には、右端または左端の派生が複数存在します。
問題
文法Gがプロダクションルールであるかどうかを確認します-
X→X + X | X *X | X | a
あいまいであるかどうか。
溶液
文字列「a + a* a」の派生ツリーを見つけましょう。 左端に2つの派生があります。
導出1 *-X→X + X→a + X→a + X *X→a + a X→a + a * a
- 解析ツリー1 *-
導出2 *-X→X *X→X + X X→a + X X→a + a X→a + a * a
- 解析ツリー2 *-
1つの文字列「a + a * a」に対して2つの解析ツリーがあるため、文法 G はあいまいです。
CFLクロージャープロパティ
コンテキストフリー言語は、以下で*クローズ*です-
- 連合
- 連結 *Kleene Starオペレーション
連合
L〜1〜とL〜2〜を2つのコンテキストフリー言語とします。 その場合、L〜1〜∪L〜2〜もコンテキストに依存しません。
例
L〜1〜= \ {a ^ n ^ b ^ n ^、n> 0}とします。 対応する文法G〜1〜はP:S1→aAb | abになります
L〜2〜= \ {c ^ m ^ d ^ m ^、m≥0}とします。 対応する文法G〜2〜はP:S2→cBb |になります。 ε
L〜1〜とL〜2〜の和、L = L〜1〜∪L〜2〜= \ {a ^ n ^ b ^ n ^}∪\ {c ^ m ^ d ^ m ^}
対応する文法Gには、追加の生成規則S→S1があります。 S2
連結
L〜1〜とL〜2〜がコンテキストフリー言語である場合、L〜1〜L〜2〜もコンテキストフリーです。
例
言語L〜1〜とL〜2〜の和、L = L〜1〜L〜2〜= \ {a ^ n ^ b ^ n ^ c ^ m ^ d ^ m ^}
対応する文法Gには、追加のプロダクションS→S1 S2があります
クリーネスター
Lがコンテキストフリー言語である場合、L* もコンテキストフリーです。
例
L = \ {a ^ n ^ b ^ n ^、n≥0}とします。 対応する文法GにはP:S→aAb |が付きます。 ε
クリーネスターL〜1〜= \ {a ^ n ^ b ^ n ^} *
対応する文法G〜1〜には、S1→SS〜1〜の追加のプロダクションがあります。 ε
コンテキストフリー言語は、閉じられていません*
- 交差-L1とL2がコンテキストフリー言語である場合、L1∩L2は必ずしもコンテキストフリーではありません。
- 正規言語との交差-L1が正規言語であり、L2がコンテキストフリー言語である場合、L1∩L2はコンテキストフリー言語です。
- 補数-L1が文脈自由言語である場合、L1 'は文脈自由ではない可能性があります。
CFGの簡素化
CFGでは、すべてのプロダクションルールとシンボルが文字列の派生に必要ではない場合があります。 その上、いくつかのヌル生産とユニット生産があるかもしれません。 これらのプロダクションとシンボルの削除は、* CFGの単純化*と呼ばれます。 簡素化は、基本的に次の手順で構成されます-
- CFGの削減
- ユニット生産の削除
- Nullプロダクションの削除
CFGの削減
CFGは2段階で削減されます-
フェーズ1 *-CFG *G からの同等の文法* G ’*の派生。各変数が何らかの終端文字列を派生します。
導出手順-
ステップ1-一部の端末を派生させ、 i = 1 を初期化するすべてのシンボル* W〜1〜*を含めます。
ステップ2-* W〜i〜を導出するすべてのシンボル W〜i + 1〜*を含めます。
ステップ3- i をインクリメントし、* W〜i + 1〜= W〜i〜*になるまでステップ2を繰り返します。
ステップ4-* W〜i〜*が含まれるすべてのプロダクションルールを含めます。
フェーズ2 *-CFGからの同等の文法 *G” の派生、* G ’*。各記号は文型で表示されます。
導出手順-
ステップ1-* Y〜1〜に開始記号を含め、 *i = 1 を初期化します。
ステップ2-* Y〜i〜から派生できるすべてのシンボル Y〜i + 1〜*を含め、適用されたすべての生産ルールを含めます。
ステップ3-* Y〜i + 1〜= Y〜i〜になるまで、 *i をインクリメントし、ステップ2を繰り返します。
問題
文法Gに相当する簡約された文法を見つけます。生成規則はPです。S→AC | B、A→a、C→c | BC、E→aA | e
溶液
- フェーズ1 *-
T = \ {a、c、e}
W〜1〜= \ {A、C、E}ルールA→a、C→cおよびE→aA
W〜2〜=ルールS→ACからの\ {A、C、E} U \ {S}
W〜3〜= \ {A、C、E、S} U∅
W〜2〜= W〜3〜なので、G ’を次のように導出できます-
G ’= \ {\ {A、C、E、S}、\ {a、c、e}、P、\ {S}}
ここで、P:S→AC、A→a、C→c、E→aA | e
- フェーズ2 *-
Y〜1〜= \ {S}
Y〜2〜=ルールS→ACからの\ {S、A、C}
Y〜3〜= \ {S、A、C、a、c}ルールA→aおよびC→c
Y〜4〜= \ {S、A、C、a、c}
Y〜3〜= Y〜4〜なので、G”を導出できます-
G” = \ {\ {A、C、S}、\ {a、c}、P、\ {S}}
ここで、P:S→AC、A→a、C→c
ユニット生産の削除
A→Bの形式の生産規則(A、B∈非終端)は、* unit production。*と呼ばれます。
取り外し手順-
ステップ1 *- *A→B を削除するには、文法で B→x が発生するたびに、生成規則 A→x を文法規則に追加します。 [x∈ターミナル、xはヌルにすることができます]
ステップ2 *-文法から *A→B を削除します。
- ステップ3 *-すべてのユニット生産が削除されるまで、ステップ1から繰り返します。
問題
次からユニット生産を削除します-
S→XY、X→a、Y→Z | b、Z→M、M→N、N→a
ソリューション-
文法には3つの単位生産があります-
Y→Z、Z→M、M→N
最初に、M→Nを削除します。
N→aとして、M→aを追加し、M→Nを削除します。
生産セットは
S→XY、X→a、Y→Z | b、Z→M、M→a、N→a
- Z→Mを削除します*
M→aとして、Z→aを追加し、Z→Mを削除します。
生産セットは
S→XY、X→a、Y→Z | b、Z→a、M→a、N→a
- Y→Zを削除します。*
Z→aとして、Y→aを追加し、Y→Zを削除します。
生産セットは
S→XY、X→a、Y→a | b、Z→a、M→a、N→a
これで、Z、M、およびNは到達不能になったため、それらを削除できます。
最終的なCFGはユニットの生産が無料です-
S→XY、X→a、Y→a | b
Nullプロダクションの削除
CFGでは、生産* A→ε*がある場合、または A で始まり、最終的に次で終わる派生が存在する場合、非終端記号 'A' はNULL可能変数です。
ε:A→…….…→ε
取り外し手順
- ステップ1 *-εを導出するnull許容の非終端変数を見つけます。
ステップ2 *-各プロダクション *A→a で、すべてのプロダクション A→x を構築します。ここで、 x は、ステップ1から1つまたは複数の非端末を削除することにより ‘a’ から取得されます。
- ステップ3 *-元の制作物をステップ2の結果と組み合わせ、*ε-制作物*を削除します。
問題
次からヌル生産を削除します-
S→ASA | aB | b、A→B、B→b | ∈
ソリューション-
2つのNULL可能変数があります- A および B
最初に、B→εを削除します。
- B→ε*を削除すると、生産セットは-
S→ASA | aB | b | a、AεB | b | &epsilon、B→b
- A→εを削除します。*
- A→ε*を削除すると、生産セットは-
S→ASA | aB | b | | SA | AS | S、A→B | b、B→b
これは、ヌルトランジションのない最終プロダクションセットです。
チョムスキー標準形
プロダクションが次の形式である場合、CFGはチョムスキー標準形です-
- A→a
- A→BC
- S→ε
ここで、A、B、およびCは非終端記号で、 a は終端記号です。
チョムスキー標準形に変換するアルゴリズム-
ステップ1 *-開始記号 *S が右側にある場合は、新しい開始記号* S ’と新しい制作 *S’→S を作成します。
- ステップ2 *-Nullプロダクションを削除します。 (前述のNull生成除去アルゴリズムを使用)
- ステップ3 *-ユニットプロダクションを削除します。 (前述のユニット生産除去アルゴリズムを使用)
ステップ4 *-各プロダクションを置き換えます A→B〜1〜…B〜n〜 where n> 2 with A→B〜1〜C where C→B〜2〜…B〜n〜 *。 右側に2つ以上のシンボルがあるすべての制作物に対してこの手順を繰り返します。
ステップ5 *-プロダクションの右側が *A→aB の形式であり、aが端末で、 A、B が非端末の場合、プロダクションは A→XB および*に置き換えられますX→a 。 *A→aB という形式のすべてのプロダクションに対してこの手順を繰り返します。
問題
次のCFGをCNFに変換します
S→ASA | aB、A→B | S、B→b | ε
溶液
(1) R.H.Sに S が表示されるため、新しい状態* S〜0〜を追加し、 *S〜0〜→S をプロダクションセットに追加して、
S〜0〜→S、S→ASA | aB、A→B | S、B→b | ∈
- (2)*ここで、nullプロダクションを削除します-
B→∈およびA→∈
B→εを削除すると、生産集合は-
S〜0〜→S、S→ASA | aB | a、A→B | S | ∈、B→b
A→εを削除すると、生産集合は-
S〜0〜→S、S→ASA | aB | | AS | SA | S、A→B | S、B→b
- (3)*次に、単位生産を削除します。
S→Sを削除すると、生産セットは-
S〜0〜→S、S→ASA | aB | | AS | SA、A→B | S、B→b
S〜0〜→Sを削除すると、生産セットは-
S〜0〜→ASA | aB | | AS | SA、S→ASA | aB | | AS | SA
A→B | S、B→b
A→Bを削除すると、プロダクションセットは-
S〜0〜→ASA | aB | | AS | SA、S→ASA | aB | | AS | SA
A→S | b
B→b
A→Sを削除すると、プロダクションセットは-
S〜0〜→ASA | aB | | AS | SA、S→ASA | aB | | AS | SA
A→b | ASA | aB | | AS | SA、B→b
- (4)*ここで、R.H.Sの3つ以上の変数を見つけます
ここでは、S〜0〜→ASA、S→ASA、A→ASAはR.H.S.の2つの非端末に違反しています。
したがって、ステップ4とステップ5を適用して、CNFにある次の最終製品セットを取得します-
S〜0〜→AX | aB | | AS | SA
S→AX | aB | | AS | SA
A→b | AX | aB | | AS | SA
B→b
X→SA
- (5)*プロダクションを変更する必要がありますS〜0〜→aB、S→aB、A→aB
そして、最終的な生産セットは-
S〜0〜→AX | YB | | AS | SA
S→AX | YB | | AS | SA
A→b A→b | AX | YB | | AS | SA
B→b
X→SA
Y→a
グレイバッハ標準形
プロダクションが次の形式である場合、CFGはGreibach Normal形式です-
A→b
A→bD〜1〜…D〜n〜
S→ε
ここで、A、D〜1〜、….、D〜n〜は非端末であり、bは端末です。
CFGをGreibach正規形に変換するアルゴリズム
ステップ1 *-開始記号 *S が右側にある場合は、新しい開始記号* S ’と新しい制作 *S’→S を作成します。
- ステップ2 *-Nullプロダクションを削除します。 (前述のNull生成除去アルゴリズムを使用)
- ステップ3 *-ユニットプロダクションを削除します。 (前述のユニット生産除去アルゴリズムを使用)
- ステップ4 *-直接および間接の左再帰をすべて削除します。
- ステップ5 *-プロダクションを適切に置き換えて、適切な形式のGNFに変換します。
問題
次のCFGをCNFに変換します
S→XY | Xn | p
X→mX | m
Y→Xn | o
溶液
ここでは、 S はプロダクションの右側に表示されず、プロダクションルールセットにはユニットまたはヌルプロダクションがありません。 そのため、ステップ1からステップ3をスキップできます。
- ステップ4 *
交換後
XのS→XY | Xo | p
with
mX | m
私達は手に入れました
S→mXY | mY | mXo | mo | p。
交換後
X in Y→X〜n〜| o
の右側で
X→mX | m
私達は手に入れました
Y→mXn | mn | o。
2つの新しいプロダクションO→oとP→pがプロダクションセットに追加され、次のように最終的なGNFに到達しました-
S→mXY | mY | mXC | mC | p
X→mX | m
Y→mXD | mD | o
O→o
P→p
CFGの補題のポンピング
補題
*L* がコンテキストフリー言語である場合、長さ*≥p *の任意のストリング *w∈L* が *w = uvxyz* として記述できるように、ポンピング長 *p* があります。ここで、* vy≠ε* 、 *| vxy | ≤p* 、およびすべての *i≥0に対して、uv ^ i ^ xy ^ i ^ z∈L* 。
ポンピング補題の応用
ポンピング補題は、文法に文脈がないかどうかを確認するために使用されます。 例を挙げて、どのようにチェックされるかを示しましょう。
問題
言語 L = \ {x ^ n ^ y ^ n ^ z ^ n ^ | n≥1} はコンテキストに関係なく、そうではありません。
溶液
*L* はコンテキストに依存しません。 そして、 *L* はポンピング補題を満たさなければなりません。
最初に、ポンピング補題の数 n を選択します。 次に、zを0 ^ n ^ 1 ^ n ^ 2 ^ n ^とします。
*z* を* uvwxyに分割します。*
- | vwx | ≤nおよびvx≠ε。*
したがって、最後の0と最初の2は少なくとも(n + 1)の位置離れているため、 vwx には0と2の両方を含めることはできません。 2つのケースがあります-
ケース1 *- *vwx には2はありません。 この場合、 vx には0と1のみが含まれます。 次に、 L になければならない uwy には、 n 2がありますが、 n 0または1未満です。
ケース2 *- *vwx には0がありません。
ここで矛盾が発生します。
したがって、 L はコンテキストフリー言語ではありません。
プッシュダウンオートマトンの概要
PDAの基本構造
プッシュダウンオートマトンは、通常の文法用にDFAを設計するのと同様の方法で、コンテキストなしの文法を実装する方法です。 DFAは有限量の情報を記憶できますが、PDAは無限量の情報を記憶できます。
基本的にプッシュダウンオートマトンは-
「有限状態マシン」+「スタック」
プッシュダウンオートマトンには3つのコンポーネントがあります-
- 入力テープ、
- コントロールユニット
- 無限のサイズのスタック。
スタックヘッドは、スタックの一番上のシンボルをスキャンします。
スタックは2つの操作を行います-
- プッシュ-上部に新しいシンボルが追加されます。
- ポップ-一番上のシンボルが読み取られて削除されます。
PDAは入力シンボルを読み取る場合と読み取らない場合がありますが、すべての遷移でスタックの先頭を読み取る必要があります。
PDAは正式には7タプル(Q、∑、S、δ、q〜0〜、I、F)として記述できます-
- Q は有限状態数
- ∑ は入力アルファベットです
- S はスタックシンボルです
- *δ*は遷移関数です:Q×(∑∪\ {ε})×S×Q×S *
- * q〜0〜*は初期状態です(q〜0〜∈Q)
- I は初期スタックトップシンボル(I∈S)
- F は受理状態の集合です(F∈Q)
次の図は、状態q〜1〜から状態q〜2〜へのPDAの遷移を示しており、a、b→c-とラベル付けされています-
これは、状態* q〜1〜で、入力文字列 *'a' に遭遇し、スタックのトップシンボルが 'b' の場合、 'b' をポップし、 'c' をプッシュすることを意味します。スタックの一番上で、状態* q〜2〜*に移動します。
PDAに関連する用語
瞬時の説明
PDAの瞬間的な記述(ID)は、トリプレット(q、w、s)で表されます。
- q は状態です
- w は消費されていない入力です
- s はスタックの内容です
ターンスタイル表記
「ターンスタイル」表記は、PDAの1つまたは複数の動きを表すIDのペアを接続するために使用されます。 移行のプロセスは、ターンスタイルシンボル「⊢」で示されます。
PDA(Q、∑、S、δ、q〜0〜、I、F)を考えます。 遷移は、次のターンスタイル表記法で数学的に表すことができます-
(p, aw, Tβ) ⊢ (q, w, αb)
これは、状態 p から状態 q への遷移中に、入力シンボル 'a' が消費され、スタックの上部 'T' が新しい文字列 'α’に置き換えられることを意味します。 。
注-PDAのゼロ以上の移動が必要な場合は、記号(⊢*)を使用する必要があります。
プッシュダウンオートマトンの受け入れ
PDAの受け入れ可能性を定義するには、2つの異なる方法があります。
最終状態の許容性
最終状態の受け入れ可能性では、PDAは、文字列全体を読み取った後、PDAが最終状態にあるときに文字列を受け入れます。 開始状態から、すべてのスタック値を使用して最終状態になる移動を行うことができます。 最終状態になる限り、スタック値は関係ありません。
PDA(Q、∑、S、δ、q〜0〜、I、F)の場合、最終状態Fのセットで受け入れられる言語は-
L(PDA)= \ {w | (q〜0〜、w、I)⊢*(q、ε、x)、q∈F}
入力スタック文字列 x の場合。
空のスタックの受け入れ可能性
ここで、PDAは、文字列全体を読み取った後、PDAがそのスタックを空にしたときに文字列を受け入れます。
PDA(Q、∑、S、δ、q〜0〜、I、F)の場合、空のスタックで受け入れられる言語は-
L(PDA)= \ {w | (q〜0〜、w、I)⊢*(q、ε、ε)、q∈Q}
例
*L = \ {0 ^ n ^ 1 ^ n ^ |を受け入れるPDAを構築します。 n≥0}*
溶液
この言語は、L = \ {ε、01、0011、000111、……………………….. }
ここで、この例では、 'a' と 'b' の数は同じである必要があります。
- 最初に、空のスタックに特別なシンボル '$' を配置します。
- その後、状態* q〜2〜*で、入力0に遭遇し、topがNullの場合、0をスタックにプッシュします。 これは繰り返される場合があります。 入力1に遭遇し、topが0の場合、この0をポップします。
- その後、状態* q〜3〜*で、入力1に遭遇し、topが0の場合、この0をポップします。 これも繰り返されます。 入力1に遭遇し、topが0の場合、top要素をポップします。
- 特別なシンボル「$」がスタックの一番上で見つかると、ポップアウトされ、最終的に受け入れ状態q〜4〜になります。
例
L = \ {ww ^ R ^ |を受け入れるPDAを構築しますw =(a + b)*}
溶液
最初に、特別なシンボル「$」を空のスタックに入れます。 状態* q〜2〜では、 *w が読み取られています。 状態* q〜3〜では、入力に一致すると0または1がそれぞれポップされます。 他の入力が与えられると、PDAはデッド状態になります。 その特別な記号「$」に到達すると、受け入れ状態 q〜4〜*に移動します。
PDAと文脈自由文法
文法 G がコンテキストフリーの場合、コンテキストフリーの文法 G によって生成される言語を受け入れる同等の非決定性PDAを構築できます。 文法 G のパーサーを構築できます。
また、 P がプッシュダウンオートマトンである場合、同等の文脈自由文法Gを構築できます。
- L(G)= L(P)*
次の2つのトピックでは、PDAからCFGへ、またはその逆への変換方法について説明します。
特定のCFGに対応するPDAを見つけるアルゴリズム
入力-A CFG、G =(V、T、P、S)
出力-等価PDA、P =(Q、∑、S、δ、q〜0〜、I、F)
- ステップ1 *-CFGの制作物をGNFに変換します。
- ステップ2 *-PDAには1つの状態\ {q}のみがあります。
- ステップ3 *-CFGの開始記号はPDAの開始記号になります。
- ステップ4 *-CFGのすべての非端末はPDAのスタックシンボルになり、CFGのすべての端末はPDAの入力シンボルになります。
ステップ5 *- *A→aX の形式の各制作物に対して、aは終端で、 A、X は終端と非終端の組み合わせであり、遷移*δ(q、a、A)*を行います。
問題
次のCFGからPDAを構築します。
- G =(\ {S、X}、\ {a、b}、P、S)*
プロダクションがあります-
*S→XS | ε、A→aXb | Ab | ab*
溶液
同等のPDAを、
P =(\ {q}、\ {a、b}、\ {a、b、X、S}、δ、q、S)
ここで、δ−
δ(q、ε、S)= \ {(q、XS)、(q、ε)}
δ(q、ε、X)= \ {(q、aXb)、(q、Xb)、(q、ab)}
δ(q、a、a)= \ {(q、ε)}
δ(q、1、1)= \ {(q、ε)}
特定のPDAに対応するCFGを見つけるアルゴリズム
入力-A CFG、G =(V、T、P、S)
出力-文法Gの非終端が\ {X〜wx〜|になるような等価PDA、P =(Q、∑、S、δ、q〜0〜、I、F) w、x∈Q}であり、開始状態はA〜q0、F〜になります。
- ステップ1 *-δ(w、a、ε)に(y、m)および(z、b、m)が含まれる場合、w、x、y、z∈Q、m∈S、およびa、b∈∑ごとに(x、ε)を含む場合、生成規則X〜wx〜→a X〜yz〜bを文法Gに追加します。
- ステップ2 *-w、x、y、z∈Qごとに、生成規則X〜wx〜→X〜wy〜X〜yx〜を文法Gに追加します。
- ステップ3 *-w∈Qの場合、文法Gに生成規則X〜ww〜→εを追加します。
プッシュダウンオートマトンと解析
構文解析は、文法の生成規則を使用して文字列を導出するために使用されます。 文字列の受け入れ可能性を確認するために使用されます。 コンパイラは、文字列が構文的に正しいかどうかを確認するために使用されます。 パーサーは入力を受け取り、解析ツリーを構築します。
パーサーは2種類あります-
- トップダウンパーサー-トップダウン解析は、start-symbolで先頭から開始し、解析ツリーを使用して文字列を取得します。
- Bottom-Up Parser -ボトムアップ解析は、文字列で下から始まり、解析ツリーを使用して開始シンボルに到達します。
トップダウンパーサーの設計
トップダウン解析の場合、PDAには次の4種類の遷移があります-
- スタックの最上部のプロダクションの左側にある非ターミナルをポップし、右側の文字列を押します。
- スタックの一番上のシンボルが読み取られている入力シンボルと一致する場合、それをポップします。
- スタックに開始記号「S」を押し込みます。 *入力文字列が完全に読み込まれ、スタックが空の場合、最終状態「F」に進みます。
例
次のプロダクションルールを使用して、文法Gの式「x + y* z」のトップダウンパーサーを設計します-
P:S→S + X | X、X→X * Y | Y、Y→(S)| id
- 溶液 *
PDAが(Q、∑、S、δ、q〜0〜、I、F)の場合、トップダウン解析は-
(x + y* z、I)⊢(x + y z、SI)⊢(x + y z、S + XI)⊢(x + y *z、X + XI)
⊢(x + y* z、Y + X I)⊢(x + y z、x + XI)⊢(+ y z、+ XI)⊢(y *z、XI)
⊢(y* z、X YI)⊢(y z、y * YI)⊢(* z、* YI)⊢(z、YI)⊢(z、zI)⊢(ε、I)
ボトムアップパーサーの設計
ボトムアップ解析の場合、PDAには次の4種類の遷移があります-
- 現在の入力シンボルをスタックにプッシュします。
- スタックの最上部にあるプロダクションの右側を左側に置き換えます。
- スタック要素の上部が現在の入力シンボルと一致する場合、ポップします。 *入力文字列が完全に読み取られ、開始記号「S」がスタックに残っている場合のみ、それをポップして最終状態「F」に進みます。
例
次のプロダクションルールを使用して、文法Gの式「x + y* z」のトップダウンパーサーを設計します-
P:S→S + X | X、X→X * Y | Y、Y→(S)| id
- 溶液 *
PDAが(Q、∑、S、δ、q〜0〜、I、F)の場合、ボトムアップ解析は-
(x + y* z、I)⊢(+ y z、xI)⊢(+ y z、YI)⊢(+ y z、XI)⊢(+ y z、SI)
⊢(y * z、+ SI)⊢(* z、y + SI)⊢(* z、Y + SI)⊢(* z、X + SI)⊢(z、 *X + SI)
(ε、z* X + SI)⊢(ε、Y * X + SI)⊢(ε、X + SI)⊢(ε、SI)
チューリングマシンの紹介
チューリングマシンは、タイプ0の文法によって生成された言語(再帰的に列挙可能なセット)を受け入れる受け入れデバイスです。 1936年にアランチューリングによって発明されました。
定義
チューリングマシン(TM)は、入力が与えられるセルに分割された無限長のテープで構成される数学モデルです。 入力テープを読み取るヘッドで構成されています。 状態レジスタは、チューリングマシンの状態を格納します。 入力シンボルを読み取った後、別のシンボルに置き換えられ、その内部状態が変更され、1つのセルから右または左に移動します。 TMが最終状態に達すると、入力文字列が受け入れられ、そうでなければ拒否されます。
TMは、正式には7タプル(Q、X、∑、δ、q〜0〜、B、F)として記述できます。
- Q は状態の有限集合です
- X はテープのアルファベットです
- ∑ は入力アルファベットです
- *δ*は遷移関数です。 δ:Q×X→Q×X×\ {左シフト、右シフト}。
- * q〜0〜*は初期状態です
- B は空白記号です
- F は最終状態のセットです
以前のオートマトンとの比較
次の表は、チューリングマシンが有限オートマトンおよびプッシュダウンオートマトンとどのように異なるかを比較したものです。
Machine | Stack Data Structure | Deterministic? |
---|---|---|
Finite Automaton | N.A | Yes |
Pushdown Automaton | Last In First Out(LIFO) | No |
Turing Machine | Infinite tape | Yes |
チューリングマシンの例
チューリング機械M =(Q、X、∑、δ、q〜0〜、B、F)と
- Q = \ {q〜0〜、q〜1〜、q〜2〜、q〜f〜}
- X = \ {a、b}
- ∑ = \ {1}
- q〜0〜= \ {q〜0〜}
- B =空白記号
- F = \ {q〜f〜}
δは-
Tape alphabet symbol | Present State ‘q0’ | Present State ‘q1’ | Present State ‘q2’ |
---|---|---|---|
a | 1Rq1 | 1Lq0 | 1Lqf |
b | 1Lq2 | 1Rq1 | 1Rqf |
ここで、遷移1Rq〜1〜は、書き込みシンボルが1、テープが右に移動し、次の状態がq〜1〜であることを意味します。 同様に、遷移1Lq〜2〜は、書き込みシンボルが1、テープが左に移動し、次の状態がq〜2〜であることを意味します。
チューリングマシンの時間と空間の複雑さ
チューリングマシンの場合、時間の複雑さは、一部の入力シンボルに対してマシンが初期化されたときにテープが移動する回数の測定値を指し、スペースの複雑さは書き込まれたテープのセルの数です。
時間の複雑さすべての合理的な機能-
- T(n)= O(n log n)*
TMのスペースの複雑さ-
- S(n)= O(n)*
受け入れられている言語と決定された言語
TMは、入力文字列wの最終状態になると、言語を受け入れます。 言語は、チューリングマシンで受け入れられる場合、再帰的に列挙可能です(Type-0文法で生成されます)。
TMは、言語を受け入れた場合に言語を決定し、その言語にない入力に対して拒否状態に入ります。 言語は、チューリングマシンによって決定される場合、再帰的です。
TMが停止しない場合があります。 そのようなTMは言語を受け入れますが、それを決定しません。
チューリングマシンの設計
チューリングマシンの設計の基本的なガイドラインは、いくつかの例を使用して以下に説明されています。
例1
TMを設計して、奇数個のαで構成されるすべての文字列を認識します。
溶液
チューリングマシン M は、次の動きによって構築することができます-
- * q〜1〜*を初期状態とします。
- M が* q〜1〜にある場合; αをスキャンすると、 q〜2〜状態になり、 *B (空白)を書き込みます。
- M が* q〜2〜にある場合; αをスキャンすると、 q〜1〜状態になり、 *B (空白)を書き込みます。
- 上記の動きから、偶数個のαをスキャンすると M が* q〜1〜状態に入り、奇数個のαをスキャンすると q〜2〜状態になることがわかります。 したがって、 q〜2〜*が唯一の受け入れ状態です。
したがって、
M = \ {\ {q〜1〜、q〜2〜}、\ {1}、\ {1、B}、δ、q〜1〜、B、\ {q〜2〜}}
ここで、δは-
Tape alphabet symbol | Present State ‘q1’ | Present State ‘q2’ |
---|---|---|
α | BRq2 | BRq1 |
例2
2進数を表す文字列を読み取り、文字列の先頭の0をすべて消去するチューリングマシンを設計します。 ただし、文字列が0のみで構成される場合、1つの0が保持されます。
溶液
入力文字列は、文字列の両端にある空白記号Bで終了すると仮定します。
チューリングマシン、 M は、次の動きによって構築できます-
- * q〜0〜*を初期状態とします。
- M が* q〜0〜にある場合、0を読み取ると、右に移動し、状態 q〜1〜に入り、0を消去します。 1を読み取ると、状態 q〜2〜*に入り、右に移動します。
- M が* q〜1〜にある場合、0を読み取ると、右に移動して0を消去します。つまり、0をBに置き換えます。 左端の1に到達すると、 q〜2〜に入り、右に移動します。 Bに達すると、つまり文字列が0のみで構成される場合、左に移動して状態 q〜3〜*になります。
- M が* q〜2〜にある場合、0または1を読み取ると、右に移動します。 Bに到達すると、左に移動し、 q〜4〜*状態に入ります。 これにより、文字列が0と1のみで構成されていることが検証されます。
- M が* q〜3〜にある場合、Bを0に置き換え、左に移動して最終状態 q〜f〜*に到達します。
- M が* q〜4〜にある場合、0または1を読み取ると、左に移動します。 文字列の先頭に到達すると、つまりBを読み取ると、最終状態 q〜f〜*に到達します。
したがって、
M = \ {\ {q〜0〜、q〜1〜、q〜2〜、q〜3〜、q〜4〜、q〜f〜}、\ {0,1、B}、\ {1、 B}、δ、q〜0〜、B、\ {q〜f〜}}
ここで、δは-
Tape alphabet symbol | Present State ‘q0’ | Present State ‘q1’ | Present State ‘q2’ | Present State ‘q3’ | Present State ‘q4’ |
---|---|---|---|---|---|
0 | BRq1 | BRq1 | ORq2 | - | OLq4 |
1 | 1Rq2 | 1Rq2 | 1Rq2 | - | 1Lq4 |
B | BRq1 | BLq3 | BLq4 | OLqf | BRqf |
マルチテープチューリングマシン
マルチテープチューリングマシンには複数のテープがあり、各テープには別々のヘッドでアクセスします。 各ヘッドは、他のヘッドとは独立して移動できます。 最初は入力はテープ1にあり、その他は空白です。 最初に、最初のテープは入力によって占有され、他のテープは空白のままになります。 次に、マシンはヘッドの下の連続したシンボルを読み取り、TMは各テープにシンボルを印刷し、ヘッドを移動します。
マルチテープチューリングマシンは、正式には6タプル(Q、X、B、δ、q〜0〜、F)として記述できます。
- Q は状態の有限集合です
- X はテープのアルファベットです
- B は空白記号です
- δ*は状態とシンボルの関係です。 +δ:Q×X ^ k ^→Q×(X×\ {Left_shift、Right_shift、No_shift})^ k ^ + *k 個のテープがある場合
- * q〜0〜*は初期状態です
- F は最終状態のセットです
注-すべてのマルチテープチューリングマシンには、同等のシングルテープチューリングマシンがあります。
マルチトラックチューリングマシン
特定のタイプのマルチテープチューリングマシンであるマルチトラックチューリングマシンには、複数のトラックが含まれていますが、すべてのトラックで1つのテープヘッドが読み取りと書き込みを行います。 ここでは、1つのテープヘッドが1ステップで n トラックからn個のシンボルを読み取ります。 通常のシングルトラックシングルテープチューリングマシンが受け入れるような、列挙可能な言語を再帰的に受け入れます。
マルチトラックチューリングマシンは、正式には6タプル(Q、X、∑、δ、q〜0〜、F)として記述できます。
- Q は状態の有限集合です
- X はテープのアルファベットです
- ∑ は入力アルファベットです
- *δ*は状態とシンボルの関係です。 +δ(Q〜i〜、[a〜1〜、a〜2〜、a〜3〜、….])=(Q〜j〜、[b〜1〜、b〜2〜、b〜 3〜、….]、Left_shiftまたはRight_shift)
- * q〜0〜*は初期状態です
- F は最終状態のセットです
注-すべてのシングルトラックチューリングマシン S には、* L(S)= L(M)となる同等のマルチトラックチューリングマシン *M があります。
非決定論的チューリングマシン
非決定論的チューリングマシンでは、すべての状態とシンボルに対して、TMが持つことができるアクションのグループがあります。 したがって、ここでの遷移は決定論的ではありません。 非決定的チューリングマシンの計算は、開始構成から到達できる構成のツリーです。
受け入れ構成であるツリーのノードが少なくとも1つある場合、入力は受け入れられます。それ以外の場合、入力は受け入れられません。 計算ツリーのすべてのブランチがすべての入力で停止した場合、非決定的チューリングマシンは*デサイダー*と呼ばれ、一部の入力ですべてのブランチが拒否された場合、入力も拒否されます。
非決定的チューリングマシンは、形式的に6タプル(Q、X、∑、δ、q〜0〜、B、F)として定義できます。
- Q は状態の有限集合です
- X はテープのアルファベットです
- ∑ は入力アルファベットです
- *δ*は遷移関数です。 +δ:Q×X→P(Q×X×\ {Left_shift、Right_shift})。
- * q〜0〜*は初期状態です
- B は空白記号です
- F は最終状態のセットです
半無限テープチューリングマシン
半無限のテープを使用したチューリングマシンには、左端があり右端はありません。 左端はエンドマーカーで制限されています。
それは2トラックのテープです-
- 上部トラック-最初の頭の位置の右側のセルを表します。
- 下部トラック-最初のヘッド位置の左側のセルを逆の順序で表します。
無限長の入力文字列は、最初は連続したテープセルでテープに書き込まれます。
マシンは初期状態* q〜0〜*から起動し、ヘッドは左エンドマーカー「End」からスキャンします。 各ステップで、テープの頭の下のシンボルを読み取ります。 そのテープセルに新しいシンボルを書き込み、ヘッドを左または右の1つのテープセルに移動します。 遷移関数は、実行するアクションを決定します。
*accept state* および *reject state* という2つの特別な状態があります。 任意の時点で受け入れ状態になった場合、入力は受け入れられ、拒否状態になった場合、入力はTMによって拒否されます。 場合によっては、特定の入力シンボルに対して受け入れられたり拒否されたりすることなく、無限に実行し続けます。
注-半無限テープ付きのチューリングマシンは、標準のチューリングマシンと同等です。
線形有界オートマトン
線形有界オートマトンは、有界有限長のテープを備えたマルチトラック非決定性チューリングマシンです。
長さ=関数(初期入力文字列の長さ、定数c)
ここに、
メモリ情報≤c×入力情報
計算は、一定の境界領域に制限されます。 入力アルファベットには、テープの左端マーカーの左にも右端マーカーの右にも移動しないことを意味する、左端マーカーと右端マーカーとして機能する2つの特殊記号が含まれています。
線形有界オートマトンは、8タプル(Q、X、∑、q〜0〜、ML、MR、δ、F)として定義できます。ここで、
- Q は状態の有限集合です
- X はテープのアルファベットです
- ∑ は入力アルファベットです
- * q〜0〜*は初期状態です
- * M〜L〜*は左端のマーカーです
- * M〜R〜*は右端マーカーで、M〜R〜≠M〜L〜
- *δ*は遷移関数で、各ペア(状態、テープシンボル)を(状態、テープシンボル、定数「c」)にマッピングします。cは0または+1または-1です。
- F は最終状態のセットです
決定論的な線形有界オートマトンは常に*コンテキスト依存*であり、空の言語を持つ線形有界オートマトンは*決定不能*です。
言語の決定可能性
すべての入力文字列 w を受け入れて停止するチューリングマシンがある場合、言語は Decidable または Recursive と呼ばれます。 すべての決定可能な言語はチューリング対応です。
*P* に対するすべてのyesインスタンスの言語 *L* が決定可能であれば、決定問題 *P* は決定可能です。
決定可能な言語の場合、入力文字列ごとに、TMは次の図に示すように、受け入れ状態または拒否状態のいずれかで停止します-
例1
次の問題が決定可能かどうかを調べます-
数は「m」素数ですか?
溶液
素数= \ {2、3、5、7、11、13、…………..}
「2」から始まる「2」から「√m」までのすべての数字で、数字の「m」を割ります。
これらの数値のいずれかが剰余ゼロを生成する場合、「拒否状態」になります。それ以外の場合、「受け入れ状態」になります。 したがって、ここで答えは「はい」または「いいえ」で作成できます。
したがって、それは決定的な問題です。
例2
通常の言語 L と文字列 w が与えられた場合、 w∈L かどうかをどのように確認できますか?
溶液
*L* を受け入れるDFAを受け取り、 *w* が受け入れられるかどうかを確認します
いくつかの決定可能な問題があります-
- DFAは空の言語を受け入れますか?
- 通常のセットではL〜1〜∩L〜2〜= Isですか?
注-
- 言語 L が決定可能であれば、その補数* L '*も決定可能です
- 言語が決定可能であれば、そのための列挙子があります。
決定できない言語
決定不能な言語の場合、言語を受け入れ、すべての入力文字列 w に対して決定を行うチューリングマシンはありません(TMは一部の入力文字列に対して決定を行うことができます)。 P に対するすべてのyesインスタンスの言語 L が決定可能でない場合、決定問題 P は「決定不能」と呼ばれます。 決定不可能な言語は再帰的な言語ではありませんが、再帰的に列挙可能な言語である場合があります。
例
- チューリング機械の停止問題
- 死亡率の問題
- 致命的なマトリックスの問題
- ポスト通信問題など
チューリングマシンの停止問題
入力-チューリングマシンと入力文字列 w 。
問題-チューリングマシンは、有限数のステップで文字列 w の計算を終了しますか? 答えはyesまたはnoでなければなりません。
証明-最初に、この問題を解決するためにそのようなチューリングマシンが存在すると仮定し、それが矛盾していることを示します。 このチューリングマシンを、限られた時間で「はい」または「いいえ」を生成する*ハルティングマシン*と呼びます。 停止しているマシンが限られた時間内に終了する場合、出力は「yes」になり、そうでない場合は「no」になります。 以下は、ホールティングマシンのブロック図です-
今、我々は* inverted halting machine(HM) ’*を次のように設計します-
- H がYESを返す場合、永久にループします。
- H がNOを返した場合、停止します。
以下は、「倒立停止マシン」のブロック図です-
さらに、それ自身を入力するマシン*(HM)〜2〜*は次のように構築されます-
- 入力で(HM)〜2〜が停止した場合、永久にループします。
- そうでなければ、停止します。
ここで、矛盾があります。 したがって、停止の問題は*決定不能*です。
ライス定理
ライス定理は、チューリングマシンによって認識される言語の重要なセマンティックプロパティは決定できないと述べています。 プロパティPは、そのプロパティを満たすすべてのチューリングマシンの言語です。
正式な定義
Pが重要なプロパティであり、そのプロパティを保持している言語L〜p〜がチューリングマシンMによって認識される場合、L〜p〜= \ {<M> | L(M)∈P}は決定不能です。
説明とプロパティ
- 言語のプロパティPは、単なる言語のセットです。 Pに属する言語(L∈P)の場合、LはプロパティPを満たすと言われます。
- プロパティは、再帰的に列挙可能な言語によって満たされない場合、またはすべての再帰的に列挙可能な言語によって満たされる場合に、自明であると呼ばれます。
- 自明ではないプロパティは、再帰的に列挙可能な言語によって満たされ、他の言語では満たされません。 正式に言えば、L∈Pの非自明なプロパティでは、次の両方のプロパティが成り立ちます。
- *プロパティ1 *-同じ言語を認識するチューリングマシンM1およびM2が存在します。 (<M1>、<M2>∈L)または(<M1>、<M2>∉L)
- *プロパティ2 *-チューリングマシンM1およびM2が存在します。M1は言語を認識しますが、M2は認識しません。 <M1>∈Lおよび<M2>∉L
証明
プロパティPが自明ではなく、φ∈Pであるとします。
Pは自明ではないため、少なくとも1つの言語がPを満たします。つまり、L(M〜0〜)∈P、∋チューリングマシンM〜0〜です。
、wは特定の瞬間の入力であり、Nは次のチューリングマシンです-
入力x
- wでMを実行
- Mが受け入れない(または停止しない)場合、xを受け入れない(または停止しない)
- Mがwを受け入れる場合、xでM〜0〜を実行します。 M〜0〜がxを受け入れる場合、xを受け入れます。
インスタンスをマッピングする関数ATM = \ {<M、w> | Mは、次のようなNへの入力w}を受け入れます。
- Mがwを受け入れ、NがM〜0〜と同じ言語を受け入れる場合、L(M)= L(M〜0〜)∈p
- Mがwを受け入れず、Nがφを受け入れる場合、L(N)=φ∉p
A〜TM〜は決定不能であり、Lpに減らすことができるため、Lpも決定不能です。
通信後の問題
1946年にEmil Postによって導入されたPost Correspondence Problem(PCP)は、決定できない決定問題です。 アルファベットover上のPCP問題は次のように述べられています-
次の2つのリスト、Given上の空でない文字列の M および N が与えられた場合-
M =(x〜1〜、x〜2〜、x〜3〜、………、x〜n〜)
N =(y〜1〜、y〜2〜、y〜3〜、………、y〜n〜)
一部のi〜1〜、i〜2〜、…………i〜k〜で、1≤i〜j〜≤nの場合、条件x〜i1〜…の場合、ポストコレスポンデンスソリューションがあると言えます。 ….x〜ik〜= y〜i1〜…….y〜ik〜は満足します。
例1
リストが
M =(abb、aa、aaa)およびN =(bba、aaa、aa)
通信後のソリューションがありますか?
溶液
x1 | x2 | x3 | |
---|---|---|---|
M | Abb | aa | aaa |
N | Bba | aaa | aa |
ここに、
- x〜2〜x〜1〜x〜3〜=「aaabbaaa」*
および y〜2〜y〜1〜y〜3〜= aaaaaaaaa
私たちはそれを見ることができます
- x〜2〜x〜1〜x〜3〜= y〜2〜y〜1〜y〜3〜*
したがって、解は i = 2、j = 1、k = 3. です。
例2
リスト* M =(ab、bab、bbaaa)および N =(a、ba、bab)*にポストコレスポンデンスソリューションがあるかどうかを確認しますか?
溶液
x1 | x2 | x3 | |
---|---|---|---|
M | ab | bab | bbaaa |
N | a | ba | bab |
この場合、ソリューションはありません-
*| x〜2〜x〜1〜x〜3〜| ≠| y〜2〜y〜1〜y〜3〜|* (長さは同じではありません)
したがって、この通信後問題は*決定不能*であると言えます。