「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

計算理論(その03/X)

はじめに


を参照しつつ計算理論を学んでいきます。

1. 正規言語

 計算理論はまずコンピュータとは何かという問いから始まる。手許にあるノートPCなどのパソコンはコンピュータとしてはあまりに複雑すぎるため、理論的には計算モデル(computational\ model)という理想的なコンピュータを用いる。科学で用いるモデルと同様に計算モデルはある面では正確である一方で、別の面では不正確である。したがって注目したい特徴に応じて異なる複数の計算モデルを扱うことにする。

1.1 有限オートマトン

 有限オートマトン(\mathrm{finite\ automata})は極度に限られたメモリしか持たないコンピュータに良いモデルである。現実における自動ドアのような単純な動作をモデル化するのに利用可能である。

1.1.3 有限オートマトンの設計

 オートマトンに関することであっても芸術に関することであっても、デザインは創造的な過程である。そのためオートマトンのデザインを単純なレシピや公式に帰着させることはできない。しかし様々な種類のオートマトンを設計するときに便利な特定のアプローチがあり得る。すなわちデザインしようとしているコンピュータに自らを入れ込み、その後そのコンピュータのタスクがどのように実行し得るかを知ることである。
 上で述べた「オートマトンとしての読者」メソッドを用いて有限オートマトンをデザインしよう。ある言語が与えられそれを認識するような有限オートマトンをデザインしたいと仮定する。オートマトンを装うのに、入力文字を受け取り、その文字がオートマトンが認識すると想定している言語の集団に含まれるかを決定しなければならない。文字列内の文字1つ1つを把握することになる。各文字の後、以上で把握したその文字列が言語の中に存在するかを決定しなければならない。その理由は、機械のように、読者が文字列の終端が来たのかを知らないからで、常に答えを用意しなければならない。
 まずこうした決定を行なうためには、文字列を読み込んでいるときにその文字列について何を記録する必要があるかを理解しなければならない。単純に認識したものをすべて記録してはどうだろうか。覚えておくべきなのは、有限オートマトンを装うをしていることおよびこの種のコンピュータはわずか有限の数の状態、すなわち有限のメモリしか持っていないことである。入力が極端に長い―たとえばここから月まで―場合を考えてみれば、恐らくそのすべてを記憶することはできないだろう。限られたストレージ容量しかもたない―たとえば1枚の紙相当—ような有限のメモリしか持っていない。幸いにも、多くの言語においてすべての入力を記録する必要はない。特定の重要な情報のみ記録すればよい。まさにどの情報が重要なのかは想定している特定の言語次第である。


 たとえばアルファベットが\{0,1\}で言語が奇数個の1を持つすべての文字列だとする。そしてこの言語を認識する有限オートマトンE_1を構築したいとする。オートマトンのふりをすべく、0,1からなる入力文字列を1文字ずつ取得する。1の個数が奇数であるか否かを決定するために全文字列を記録する必要はあるか。もちろん、そんなことはない。単純にそれまでの1の個数が偶数か奇数かを記録し、そして新しい文字を読み込んだ際にこの情報を残しておけばよい。もし1を読み込めば答えを返しせばよい。しかしもし0を読み込めば、答えはそのままにしておけばよい。
 しかしE_1のデザインにこれがどのように役立つのか。ひとたび読み込まれるがままに文字列を覚えるように必要な情報を決定していれば、この情報は確率の有限なリストとして表示される。この例では、確率はとりあえず偶数もしくはとりあえず奇数となる。すると各確率にある状態を割り当てることになる。これらがここで示すE_1の状態である。


2つの状態\boldsymbol{q_{\mathrm{even}}}\boldsymbol{q_{\mathrm{odd}}}


 次に、記号を読み込むことである確率が別の確率に移る方法を見ることで遷移を配置する。したがって、もし状態q_{\mathrm{even}}が偶数である確率を表し状態q_{\mathrm{odd}}が奇数である確率を表すならば、状態を変える遷移を1で、状態を維持する遷移を0で表すことになる。


確率の配置された遷移図

 そして、0文字(空文字列\varepsilon)を読み込んだことに関連した確率に対応する状態である開始状態を設定する。この事例では、0は偶数だから開始状態はq_{\mathrm{even}}である。最後に、入力した文字列を強したい確率に対応する許容状態を設定する。ここでは1sの奇数番号を認識したときに許容したとしたいから、[tex:q_{\mathrm{odd}}を許容状態とする。


開始状態と許容状態を追加した遷移図

1.1.4 正規言語における演算

 有限オートマトンおよび正則言語の性質を調べていく。そうすることで特定の言語を認識するためのオートマトンをデザインするための技術を開発できる。
 算数において基本的な対象は数であり、道具は数を操作するための+\timesといった演算子である。計算理論では対象が言語であり、道具はそれらを操作するために特別にデザインされた演算子である。ここで正規演算(regular\ operation)と呼ばれる、言語に対する3つの演算子を定義し、これらを正規言語の性質を調べるために用いる。



定義1.4 正規演算 A,Bを言語とする。正規演算として和(union)、連結(concatenation)およびスター(star)を以下で定義する。

  • 和(union)

     A\cup B=\left\{x\left|\right.x\in A\lor x\in B\right\}
  • 連結(concatenation)

     A\circ B=\left\{xy\left|\right. x\in A\land y\in B\right\}
  • スター(star)

     A^{*}=\left\{x_1x_2\cdots x_k\left|\right.k\geq0\land x_i\in A\right\}


 連結演算は、新しい言語の文字列を得るべく想定できるあらゆる方法でBに含まれる文字の前にAに含まれる文字を充てる。
 スター演算は、2つの異なる言語というよりは1つの言語に適用されるという点で他2つとは少し異なる演算である。すなわちスター演算は1項演算である。スター演算は新たな言語を得るべく、Aに含まれる任意の数の文字列を結合する。任意の数とは0を含み、空文字列\varepsilonAが何であれ常にA^{*}に含まれる。



定理1.5 正規言語のクラス 正規言語のクラスは和演算に関して閉じている。すなわちA_1,A_2が正規言語であるならば、A_1\cup A_2もまた正規言語である。
(\because M_1=\left(Q_1,\Sigma,\delta_1,q_1,F_1\right))としてM_1A_1を認識し、M_2=\left(Q_2,\Sigma,\delta_2,q_2,F_2\right))としてM_2A_2を認識するものとする。M=\left(Q,\Sigma,\delta,q_1,F\right)に対してA_1\cup A_2を認識するMを以下を満たすように構築する。

  • Q=Q_1\times Q_2=\left\{(r_1,r_2)\left|\right.r_1\in Q_1 \land r_2\in Q_2\right\}
  • \SigmaM_1,M_2に共通とする。
  • 遷移関数\deltaを以下のように定義する。

     (r_1,r_2)\in Q,a\in\Sigmaに対して

    \begin{aligned}\delta\left((r_1,r_2),a\right)=\left(\delta(r_1,a),\delta(r_2,a)\right)\end{aligned}

    とおく。
  • q_0=(q_1,q_2)とする。
  • Fはその一方がM_1,M_2の許容状態であるような状態の組の集合とする。

 これはA_1,A_2の和集合を認識する有限オートマトンMの構築方法に他ならない。 \blacksquare)


 これと同様に連結でも演算は閉じていることを示すことができる。


定理1.6 正規言語のクラス 正規言語のクラスは連結演算に関して閉じている。すなわちA_1,A_2が正規言語であるならば、A_1\circ A_2もまた正規言語である。

プライバシーポリシー お問い合わせ