はじめに
を参照しつつ計算理論を学んでいきます。
0. 序章
0.1 オートマトン、計算可能性および複雑性
本書は「オートマトン、計算可能性および複雑性」を扱う。これらは以下の問いに結びついている:
コンピュータの根本的な可能性と限界とは何か?
オートマトン、計算可能性および複雑性の各領域において、この質問はそれぞれ異なる解釈がなされる。
領域 |
内容 |
||
---|---|---|---|
(1) | オートマトン | 計算の数理モデルが持つ定義や性質を扱う。 | |
(2) | 計算可能性 | 計算問題が解決可能か否かを類別する。 | |
(3) | 複雑性 | 計算が困難であるまたは容易であるかを決定づけるものは何かを議論する。 |
0.2 数学的用法
以降、基礎的な数学的用法を扱う(以降、ここでは一般的な高校・大学数学で扱う範囲の議論は省略し、一般的な数学における用語と言い回しが異なったり、新しい概念、以降のために確認した方が良いもののみ扱う。)。
0.2.1 タプル
オブジェクトの数列はある順序で並んだオブジェクトのリストである。以降では数列を
と括弧「"()"」で囲うことで表現することにする。数列では順番に意味があるため、と
は異なるものとして扱う*1。
数列は無限の場合と有限の場合がある。有限の場合を特にタプルということがある。
を2つの集合とするとき、
と
の
積
*2はその第一成分が
に、その第二成分が
に属するような順序を持ったすべての組み合わせをいう。
0.2.2 述語
関数の中でもその値域がのいずれかしか取り得ないものを述語(
)という*3。たとえば入力した自然数が偶数ならば真、そうでなければ偽と返す関数
は述語である。
その定義域が次タプル
であるような述語を関係(relation)*4、特に
項関係という。
関数として書く代わりに述語と集合をまとめて表記する方がより便利な場合がある。述語は
と書かれることがある。ここで
である。
特別な二項関係として同値関係(equivalence relation)がある。これは2つのオブジェクトが何らかの特徴の観点で同等である(equal)ことを捉える概念である。二項関係が同値関係であるとは
が以下の性質を持つことをいう:
は反射律を満たす:
は対称律を満たす:
は推移律を満たす:
0.2.3 グラフ
無向グラフ*5はその一部*6が線で連結した点の集合である。グラフ理論では点はノード(node)や頂点(vertex)と呼ばれ、線はエッジ(枝・辺)と呼ばれる。
ある特定のノードが持つエッジの数を次数(degree)という。任意の2つのノード間には1つの辺までしか許されない。状況によってはループと呼ばれる、自分へのノードを許す場合もある。
ノードを含むグラフ
において組み合わせ
は
を連結する枝を表す。無向グラフでは
の順序は重要ではなく、そのため
と
は同じ枝を表す。順序の無い組み合わせを集合の記法
で無向の枝を表す場合がある。もし
が
のノードの集合、
が枝の集合だとするならば、
と書く。グラフは図またはより形式的に特定の
により表現することができる。
グラフは時にデータを表現するのに用いられる。ノードが都市、辺がそれらをつなぐ高速道路を、もしくはノードが人、辺がその間の友好関係を表すことがある。利便性のためにグラフのノードおよび/または辺は、このときラベル付けされたグラフと呼ばれることもある。
グラフのノードが
のノードの部分集合で、
の辺が対応するノードの
の辺であるとき、
は
のサブグラフであるという。

グラフにおけるパス(経路)は枝により結ばれたノードの列である。単純パスはどのノードも2度経由しないパスを表す。もし任意の2つのノードにそれらをつなぐ経路があるならばグラフは連結している(connected)という。パスが同じノードで始まって終えられるならばそのパスを循環(cycle)という。少なくとも3つのノードを持ち最初のノードと最終のノードのみが繰り返すような循環を単純循環という。グラフが木(tree)であるとは、連結しているが単純循環を持たないようなグラフである。
有向グラフは線の代わりに矢印で表す。ある特定のノードから出て行く矢印の数をそのノードの出次数(outdegree)といい、ある特定のノードに入る矢印の数を入次数(indegree)という。有向グラフにおいてノードから
へのエッジを組み合わせ
で表す。有向グラフ
は形式的には
で書く。ここで
はノードの集合で、
は辺の集合である。すべての矢印が同じ方向を向いて進んでいるようなパスを有向パスという。有向パスがすべての2つのノードをつないでいるならば有向グラフは強く連結されているという。有向グラフは二項関係を用いるのが簡単な表現方法である。もし
が定義域を
とするような二項関係であるならば、ラベル付けされたグラフ
は
を表す。このとき
である。
0.3 文字列(string)と言語
文字列(strings of characters)はコンピュータ科学において基本的な構成要素である。ここではアルファベットを任意の空でない有限集合だとし、アルファベットの元はアルファベットを表す記号である。通常、アルファベットおよびアルファベットに属する記号を表現するための字体を表すのにそれぞれを用いる。以下がアルファベットの例である:
あるアルファベットからの文字列(string over an alphabet)はそのアルファベットからの記号からなる有限の数列を指し、普通はお互いに隣り合わせで書き、コンマで区切らない。たとえばアルファベットに対して
はアルファベット
からの文字列である。
が
からの文字列であるとき、
の長さ(length)は
と書き、その文字列が含む記号の数を言う。長さが
であるような文字列は空記号といい、
で表す。文字列
が長さとして
を持つ場合、
を
と書くことができる。アルファベット
の逆元を
と書くことにすれば、
である。またアルファベット
に含まれるアルファベット
を部分文字列(substring)という。たとえば
は
の部分文字列である。
アルファベットに対して
と
の連接
を
で定義される。同じ文字列を何度も連結する場合は
でそれを表すこととする。
文字列の辞書式順序は辞書における順序と同じものである。
0.4 ブール代数
ブール代数はの2値のみから構築された数学的体系である。当初は純粋数学として受容されてきたものの、今やこの体系はデジタル家電やコンピュータデザインにおける基礎と見なされている。ブール代数において
はブール値といい、
で表現されることがある。ブール値は2つの可能性がある状況、たとえば高電圧と低電圧が起こり得る導体や真か偽を取り得る命題、
か
で答え得る質問に用いる。
ブール値はブール演算子を用いて計算できる。
否定( |
||
論理積( |
||
論理和( |
ブール演算子は、より複雑な算術結果を表すのに和や積を用いるように、単純な命題をより複雑なブール表現に結合するのに用いる。たとえば命題および命題
に対して
は
かつ
を意味する。
の値をその演算の被演算子(
)という。
他のブール演算子が度々現れることもある。排他的論理和は、どちらか一方のみが
であるときに
となるような演算子で、
で表される。また等価(
)は両被演算子が同じ値であるときに
を返す演算子で、
と書く。最後に実質含意(
)は
で表され、最初の被演算子が
で2つ目が
であるときのみに
を返す演算子である。
排他的論理和 | 等価 | 実質含意 | |
---|---|---|---|
これらの演算子を用いると様々な関係を構築できる。以下の各行は同値である。
⇔ | ||
⇔ | ||
⇔ | ||
⇔ |
および
の分配則はブール表現を操作するのに便利である。