第12話 プログラム基
第12話 プログラム基
形状による情報表記の原理は、基本的に2進法に似ている。
例えば、ここに三角形があったとする。仮想的に重心をおくことにする。三角形の頂点からそれぞれ重心に線を描くと3つの領域ができる。ここに4点目を加えるとき3領域のどの領域に4点目が存在するかでデータを0~2(3つ)に区分できる。尚、ここでは簡単のために平面で説明を進めたい。一般的に物質は任意の頂点を持つ。このとき、頂点の集合から凸型図形となるように外周の点を選択する。また、この凸型図形を構成する点はデータ量に加えない。データ量は凸型図形の内側に存在する頂点数とその頂点の入れ子次数によって決まる。
上述の三角形に投入した4点目は、3つの領域のいずれかに存在する。3つの領域のいずれもが三角形であるから、その3つの頂点から4点目に線を描くと新しい領域が3つ増える。この領域は2次領域となり、最初に存在した領域は1次領域となる。頂点が存在する領域の次数により頂点の次数は決定される。例えば1次領域に存在する頂点は1次頂点である。このようにして頂点の位置関係によりデータを表現できる。このことから頂点数が増えると扱えるデータ量も増え、入れ子次数も高くなるほどデータ量を増やす。尚、全頂点の完全グラフを考えたとき、入れ子次数が高くなるほど線分の交差数が減ることがわかっているが、簡単のためここでは考慮しないこととする。
コンピュータの基本原理は2進数であり、それから複雑なプログラムを生み出すことが出来る。同じように上述の頂点の位置関係からもプログラムを生み出すことでき、問題はデータの処理部となる。
筆者は8086系のCPUだけしか仕組みがわからないため、8086の仕組みと対比させて、上述のデータの処理部を考えたい。尚、2進数に対して上述のデータ表記を領域数と呼ぶこととする。8086は2進数で表現できるデータを2の19乗ビット=65,536バイト扱うことが出来る。2進法を基数を2としたとき、領域数の基数は3となる。しかし、筆者の怠惰から領域数の扱えるデータ量の計算式が不明である。次数が含まれるため単純な指数表現ができないことをいいわけとしたい。
8086はこの65,536バイト領域を4つのセグメント(データ領域)に分けている。CS、DS、SS、ESがそのセグメントの名称であるが、簡単のためにCSと他3つの2つの部分にわけて考えたい。CSセグメントは命令を格納し、行う処理を順番に並べた領域である(くどいようであるが命令も2進数で表現される)。他3つの領域はデータ部である。
このCSの部分を免疫系(だけとは限らないが)がどう処理するかというのが問題となる。CPUにはそのCPU独自のマシン語と呼ばれる2進表記(結局は数値であるが)と命令を対応づけたものがある。CPUに送られた2進表記の数値はハードが対応付けられた命令に変換して実行する。では、CPUに相当する生体の部位はどこかというのが謎であるが、免疫は免疫系の機序に従って振舞っていることは確かなようであるからどこかには存在すると考える。そしてCSに命令を書き込むのは誰かと言うのも問題となる。コンピュータの場合は人がプログラムした命令をCSに送り込むが、生体の場合誰がプログラムするのか謎である。桃九はこの2点の謎の正体をチロルから聞いて知っているようだが内緒のようである。
CSをコード・セグメントと呼ぶが、多くの場合CS部に書き込まれた命令は、プログラムが終了するまで変化することはない。例外的に例えばWindowsのDLLのように置き換えられるものもあるが、これをプログラムの学習とは呼ばない。
自然免疫はこれと同じで学習をせず、先天的に与えられた命令を実行するだけであるが、獲得免疫は学習しているように見える。未知の細菌を未知のデータと同じとするならば、未知のデータを処理するために新しいプログラムをCSにセットする必要がある。尚、多くの未知のデータに対応した高度なプログラムが生体に存在するとは考えにくい。その理由の詳細は省くことになるが、理由の1つにはCSにセットするコード(命令群)が大きくなりすぎて複雑化することが上げられる。
このようにコンピュータと免疫系の制御には類似点が多い。そしてチロルはプログラム基に命令を埋め込むためのコンパイラを備えていた。チェイサー基3基を制御するプログラム基が埋め込まれ、地球上の細菌やウイルスはことごとく死滅させることができるようなった。