人類史上最も偉大な積み木-パソコンの作り方-
『前提』は1章と被ってます始めの1行だけ読めば十分です
『馬鹿モン通るかこんなもん!』『あの世での積み木』も飛ばして問題ないです
中学校程度の数学の知識を仮定しています
数学学習者向けに集合論なんかの知識を仮定したこの記事と同等の内容で文字数が10分の1程度のものを作るつもりです
前提
現代の物理学を駆使して、以下に示すand,or,not,D-フリップフロップ回路が作れる(1章と同じ内容)
また、前章で言い忘れたが、直流電源とクロック(高電位と低電位を交互に繰り返すもの)も使用する*クロックが一秒間に何度電位を繰り返すかをクロック周波数といい。消費電力とパソコンの計算速度に比例する
- 定義:and回路
*1左の図でx1とx2を高い電位*+の電気がいっぱいあること にするとyが高い電位になり、それ以外では低い電位*ーの電気がry となる。なお次の図のように略記し、高電位を1、低電位を0とすると次の表で表せるなお、xは入力といい電位の操作は電源の+やーの部分につなげればいい、yは出力といわれており、ダイオードなどをつないで出力を確認したり、ほかの回路の入力につないだりして使う*無理やり出力同士をつないだり、電源につなげたりするとショートする、回路の実験ではショートが多発し実験室中が焦げ臭くなる
- 定義:or回路 andと同様に
- 定義:not回路 同様に
- 定義:Dフリップフロップ(簡易版) 下図でCLK(クロック)が0から1になった瞬間にQ(出力)の電位がD(入力)と同じになる。その瞬間以外ではQは電位を同じ値で維持し続ける
目的
上の回路を組み合わせてcometⅡの動作をするものが作れることを理解する
ブール代数(の簡単なやつ)
この図でx1とx2は、1か0(高電位か低電位か)を表す変数です。このとき出力yのことをx1・x2と表し、当然
x1=0,x2=0 のとき x1・x2=0
x1=0,x2=1 のとき x1・x2=0
x1=1,x2=0 のとき x1・x2=0
x1=1,x2=1 のとき x1・x2=1
となります。また『・』は掛け算を意味し、略記してx1・x2をx1x2と書くこともあります
同様にorも+で表し
x1=0,x2=0 のとき x1+x2=0
x1=0,x2=1 のとき x1+x2=1
x1=1,x2=0 のとき x1+x2=1
x1=1,x2=1 のとき x1+x2=1
notは¬で表し
x=0 のとき ¬x=1
x=1 のとき ¬x=0
と表します
馬鹿モン通るかこんなもん!
『1+1=1』!? ふざけるな痴れ者が! と心の中で少しでも思った方
あるいは「よくわかんないけど、そういうもんだしとりあえず覚えるか」と考えた方
残念ながらまっとうな教育を受けられておられないのでしょう。お悔やみ申し上げます。それはあなたが悪いのではなくそのような指導方針を設けた文科省の責任です
私たちは中学校で四則演算を習いました。()の中から計算し、掛け算、足し算の順番に計算していきます。分配法則も習いますね…高級なことを知っている人であれば微分積分二次関数指数法則…
しかし、そんなものを覚えたって社会では何の役にも立ちません
みなさんは掛け算と足し算を疑ったことがあるでしょうか、そしてそれが何を表しているか考えたことがあるでしょうか。疑うというのはたとえば 1=2×(1/2)=(1+1)×(1/2)=……などとやってる間に1=(途中式)=0みたいなことにならないということです
掛け算というのは例えば面積の計算、個数とお金の計算など抽象化(重要な部分を抜き出すこと)です。重要な性質である分配法則は区切られた田畑の面積の計算などをうまく表せています(すみません、下の図思っきし計算ミスして作っちゃいました)。ちなみに結局のところいかに途中式を経ようが値は変わりません
このように、本質は対称の抽象化と矛盾なく対象を表した定義ができることです。それができた上での議論が数学です
「連立方程式を100問プリント、はじめっ…!」…ばからしいです。高校では微分と積分だって覚えるだけです。グラフの面積も求める問題も定義を教えられずいきなり積分の計算をさせられます。みなさん3変数連立方程式を解くのにどれだけかかるでしょうか?速く解けるのなら結構です。では4変数なら?富士通のスパコン『京』は100万変数連立方程式を1時間で解きます。もし、大学に入ってまでこのような態度で数学に臨んでいるとしたら今すぐ荷物をまとめて地方に帰ったほうがよろしいでしょう
要は役にさえ立てばいい-ブール代数の諸性質-
威勢よく啖呵を切ったからには上記の演算がどう対象(ここでは回路)を表し、その性質をどう定義して表しているかを示しましょう
言葉の定義
- 小中高での数(*意味は推し量ってください)の世界は実数で1やら-100やら√2やら無限に広がる世界でしたが、今回は電位が高いか低いかを表す代数ですから、変数が表すのは0か1であり、この代数をブール代数(の一種)といいます
- またブール代数において+は理論和、・は理論積、¬は否定といい、実数の世界の掛け算足し算と異なるものです
掛け算と足し算の順番
6+3+7+9+0+1 を簡単にしなさい
6・5・9・1 を簡単にしなさい(『・』は『×』の意味)
と聞かれてわかりますか? さすがにできないなら文科省でなくあなたの責任ですが当然26と270です。では、次はブール代数において
0+0+0+1+0 を簡単にしなさい
0・1・1・1・1・1 を簡単にしなさい
ただしこれらはブール代数です
と聞かれてわかりますか?(答えは以下の解説を聞いた後で自分で考えて欲しいですが自分で思考できない方は*2を参照ください)
みなさんこの画像をご存知でしょうか
*3Twitterやテレビで話題になりました。このあほらしい画像について議論はしませんが6本をペンを8人が持ってるので6*8だろうが8人が6本づつペンを持っているから8*6だろうが当然どちらでも正しいのです
そこにはなぜ、と問いただす余地はなく、神が世界を定めた『法則』です*第一章のはじめにを参照
当然「いや、問いただす余地はある!」という人もいていいです。しかし自然科学には向いてないでしょう
さて、同様に足し算が複数個あっても足し算の結果は同じです。猿にドングリを朝1つ昼2つ晩2つ渡そうが、朝1つ昼3つ晩1つ渡そうが猿のもらうドングリの数は同じです。日本においてこの事実は大学を卒業した教師ですら知らないですが、中国人は大昔にその本質をとらえています*4
ではブール代数での複数の演算はどうでしょう。本来+などは2つの数にしか適応できない演算子です(二項演算子といいます)。ブール代数とは回路の抽象化でしたので回路の対応も一緒に考えましょう
- 左から計算する場合*()の中から計算します
( ( (0+0)+0)+1)+0=( (0+0)+1)+0=(0+1)+0=1+0=1
対応する回路は下図です。0は低電位,1は高電位を表す
①はor回路に0と0の入力なので0が出力
②は0と0で0が出力
③は0と1で1
④は1と0で1
よって1が出力されます。これは上記の計算と一致します - でたらめな順番で計算する場合
( (0+0)+( (0+1)+0) )=0+(1+0)=0+1=1
もうお分かりでしょうが、ブール代数の式一つ一つに回路が対応し、
( ( (0+0)+0)+1)+0=( (0+0)+( (0+1)+0) )のようにイコールで結べる時、対応する回路の出力は一致します。
演習問題
演習問題を用意しました。理解の確認のためではなく必須事項です。3問目以外は理解して行ってください
1.上記では0+0+0+1+0を2通りでか試さなかったが、ほかの場合でも同じものが出ることを確認せよ。またand回路に対応する0・1・1・1・1・1についても同じことを考え
2. 0+0+0+1+0 の『+』の数と0や1の数は回路では何に対応しているか説明せよ
3. 0+0+0+1+0 の足し算の順番は何通りあるか、また、100入力での足し算なら何通り
4. 上記の内容はx1+x2+x3のように0や1をすべて変数で置き換えても成り立つ、その意味を小学生でも理解できるように説明せよ(これは中学校の内容である)
5. x1(x2+x3)=x1x2+x1x3 を示し、対応する回路を書け、ちなみに理論積の記号・は省略して書いてあり、掛け算と足し算が混ざった計算では掛け算を先に計算する(分配法則)
6. 『¬』はx=0 のとき ¬x=1、x=1 のとき ¬x=0を表す演算子であった。では
¬(¬x1)=x1、¬(x1+x2)=¬x1・¬x2、¬(x1x2)=¬x1+¬x2 を示し、対応する回路を書け(後者2つはド・モルガンの法則)
解答はこちら*5
あの世での積み木
人類史上最も偉大な積み木、というタイトルの時点で
「まあandとかをうまく積んでいってパソコンの説明する話やろなぁ…」
と思っていた方は「なんでわいはわけのわからん数学やらされとんねん!」とお思いでしょう。お思いですか?
しかし上記の内容が積み木の話であることには違いありません。ただしあの世で積み木をするのです
今やちょっとしたアンティークともいえるインテル社の傑作CPU『pentium』に使われているandやor回路などの数ですら1億個です。その一つ一つを画像で表示して「ほら、ここにこう電流が通るとこうなるからここは高電位になってね…」みたいな話をしますか!?それでもいいという人もいるかもしれません
しかし、ブール代数で話をすれば
上図左の回路を
¬(¬x1+x2)・x3という記号で表せる上に
¬(¬x1+x2)・x3=¬(¬x1+x2+¬x3) (ド・モルガンの法則)
が成り立つので左の回路が右の回路と同じ機能を持つことまですぐにわかります。つまり現実のものをそのままとらえるより抽象化し、記号だけで語るほうがはるかに効率的なのです。そのための数学です
ブール代数の計算をすることとは、記号の世界で積み木をすること。これはもはやあの世で積み木をしているといってもよいでしょう(ギリシア哲学に詳しい人ならイデア界といった方が通じるかもしれません)
本当はここでコンピューターの作り方の説明を終えるつもりでしたが、余談過多のためできなくなりました。2,3章構成にするつもりなのでいったんここで区切ります。しっかりとパソコンが作られていく様子を解説するつもりなのでぜひ続きを待っていただけたらと思いますm(_ _;)m
*2:0+0+0+1+0+0=1、0・1・1・1・1・1 =0
*3:6×8は正解でも8×6はバッテン?あるいは算数のガラパゴス性:プロジェクトマジック:オルタナティブ・ブログ様より引用
*5:1.略
2.+はor回路の数,0と1は入力の数
3. 24通り、99!(=99×98×…×2×1)通り
4. たとえば上記の内容を変数x1,x2,x3で置き換えた
『(x1+x2)+x3=x1+(x2+x3)』という式は
x1=0,x2=0,x3=0の時でも
x1=1,x2=0,x3=1の時でも成り立ち、回路の対応が一致する
すなわち、x1,x2,x3がどんな値を取ろうとも式や対応などの諸性質が成り立つすること
5. 問題4で言った通り、変数で成り立つとは、変数がどんな値をとっても成り立つことを示せばよい
すなわち(x1,x2,x3)=(0,0,0)の時や*x1=0,x2=0,x3=0の時という意味
(0,0,1),(0,1,0),(0,1,1),(1,0,0),(1,0,1),(1,1,0),(1,1,1)の時に左辺と右辺を計算して一致することを確かめればよい、回路は『分配法則 回路』でググれば出てくる
6. 問題5と同様、回路は『ド・モルガン 回路』と検索すればよい