わっふるぶろぐ

わっふるが日々の出来事をただただ書いていきます~

『CODE』第10章 論理とスイッチ

この章では、論理演算をビットで表現する方法や、論理式とスイッチの関係について詳しく書かれていました。

 

序盤では、論理の数学的定義に取り組んだジョージ・ブールが紹介されています。この本では、ブールについて詳しく説明されてますが、ここでは割愛します。よろしければWikipediaでご確認ください!

 

ジョージ・ブール - Wikipedia

 

ブールは従来の代数によく似た代数の一種を発明しました。ブールの代数(ブール代数)は、数字の代わりに集合を扱います。この本では猫を例に挙げて説明されていました。僕なりに要約して、その一部を紹介します!

 

雄猫の集合をM、雌猫の集合をFとし、猫全体の集合を1とすると、次の式が成り立ちます。

 

M + F = 1

1 − M = F

 

ブール代数は、どちらかの集合に属しているもの全ての集合になります。は、左の集合に属していてかつ右の集合に属していないもの全ての集合になります。1 − MはMでないもの全ての集合(つまりF)となります。

また、猫を色で分けることもできます。褐色ならT、黒ならB、白ならW、その他ならOと分けると、

 

T + B + W + O = 1

 

となります。

そして、去勢された猫の集合をU、されてない猫の集合をNとも表現でき、

 

 N + U = 1

 

も成り立ちます。

また、何もない集合を0とすると、

 

M − 0 = M

 

などとなります。

また、ブール代数の✖️は両方に属しているもの全ての集合です。↓は雄であって、かつ雌でもある猫全体の集合(つまり0)になります。

 

M × F = 0

 

ちなみに、僕の高校時代は空集合をΦ、全集合をUと習いましたが、ここでは0と1で定義されてます。この方が後々説明しやすいんです!

 

さて、この本ではこんな例え話をしています。あなたはペットショップに行って、店員に「雄で去勢してあって白か褐色の猫か、雌で去勢してあって白以外の猫が欲しいんだけど、いなければ黒ならどの猫でもいい」と尋ねます。これは、次の猫の集合から一匹欲しいと言ってることになります。

 

(M × N × (W + T)) + (F × N × (1 − W)) + B

 

ここで、猫が集合に属することを1、属さないことを0とビットで表現します。(ココが一番重要!)

店員が「去勢されてない褐色の雄」を連れてきたとすると、次のようになります。

 

(1 × 0 × (0 + 1)) + (0 × 0 × (1 − 0)) + 0

 

この式を簡単にしていきます。➕はどちらかに属していればいいのでOR、✖️はどちらにも属していればいいのでANDと表します。それぞれは定義から、次のように計算されます。

f:id:waffle202:20200227012423p:plain
f:id:waffle202:20200227012434p:plain

よって、式を簡単にすると次のようになります。

 

(0 × 0 × 1) + (0 × 0 × 1) + 0 = 0 + 0 + 0 = 0

 

結果は0、つまり、店員が連れてきた猫は条件を満たさないことになります。

次に店員は、「去勢された灰色の雌」を連れてきます。式は次のようになります。

 

(0 × 1 × (0 + 0)) + (1 × 1 × (1 − 0)) + 0

 

これを簡単にすると次のようになります。

 

(0 × 1 × 0) + (1 × 1 × 1) + 0 = 0 + 1 + 0  = 1

 

結果は1、つまり、あなたは欲しかった子猫を見つけることができたのです!

 

さて、いくつかのスイッチと電球をつないで、子猫が条件を満たすかどうかの判定に役立つ回路を作りたいと思います。ブール代数電気回路を一体化し、2進数で動くコンピュータの設計と構築の可能性を見ていきましょう!

このように、スイッチを並べてつなぐ方法を並列といいます。並列は、どちらかのスイッチが閉じたとき電球が点灯します。

f:id:waffle202:20200229041041p:plain

並列スイッチ回路

また、このように、前後にスイッチを連続してつなぐ方法を直列といいます。直列は、両方のスイッチが閉じたときのみ電球が点灯します。

f:id:waffle202:20200229041517p:plain

直列スイッチ回路

スイッチが閉じている状態を1、開いている状態を0とし、電球は点灯したときを1、しないときを0とすると、並列スイッチと直列スイッチは次のようになります。

f:id:waffle202:20200227120321p:plain
f:id:waffle202:20200227120312p:plain

 これは、先のORとANDの表と一致します。つまり、それぞれの回路はブール代数のORとANDを表しているのです!

それでは、子猫の条件式を回路にしてみましょう。次のようにつなぐことができます。

f:id:waffle202:20200227014412p:image

「去勢された灰色の雌」に相当するスイッチを閉じると次のように、電球が点灯し、子猫の条件を満たすことを示しています!

f:id:waffle202:20200227014425p:image

これでようやく何かを計算(演算)してくれる装置が作れるようになってきましたね。コンピュータが完成するまであと一歩な気がしてきました!

 

第11章では、4つの論理ゲートというものを紹介します。

 

waffle202.hatenablog.com