小学生の頃住んでいた家は2階建てで、急な階段があった。天井に電灯が1つついていた。電灯のスイッチは、階段の両端、つまり、1階と2階に1つずつついていた。
スイッチは、上方向か下方向に切り替えるタイプのもので、必ず上か下かの値をとる。この家には7〜8年住んでいたが、長い間、このスイッチについて不思議に思っていた。スイッチの向きと灯りが点くか消えるかの関係が毎回かわるように思ったからだ。今はこの家はもう取り壊されて存在しないので確かめようがない。この関係について想像してみよう。
1階のスイッチをA、2回のスイッチをBとする。スイッチに求められる仕様は簡単だ。今、灯りが消えているとする。ABどちらかの向きをかえたら光が点く。消したいときも同様、ABどちらかの向きをかえたら光が消える。電灯の回路はどんな設計だったのだろうか。
まず、2つのスイッチを直列につないでみると以下のようになる。
A | B | 光 | |
上 | 上 | 明 | |
上 | 下 | 暗 | |
下 | 上 | 暗 | |
下 | 下 | 暗 |
この回路では、2つのスイッチの両方が上方向になっていないと光が点かない。これは不便である。今、2階から1階へ降りるために電灯を点けたいとする。仮に今Aが「下」だとすると、Bを「上」にしても「下」にしても灯りを点けることができないのだ。つまり、灯りを点ける主効果をAもBももっていないということだ。
ちなみに、「上」「明」を1、「下」「暗」を0で表せば、この回路は論理積であることがわかる。
A | B | 光 | |
1 | 1 | 1 | |
1 | 0 | 0 | |
0 | 1 | 0 | |
0 | 0 | 0 |
次に、スイッチを並列につないでみよう。今度はこうなる。
A | B | 光 | |
上 | 上 | 明 | |
上 | 下 | 明 | |
下 | 上 | 明 | |
下 | 下 | 暗 |
この回路の問題点は2つのスイッチがともに「下」になっていないと灯りを消せないことだ。Aが「上」なら、Bを「上」にしても「下」にしても電灯を消すことはできない。AにもBにも灯りを点ける主効果があり、交互作用効果がないので、こういうことになってしまう。
これを1と0で表現すれば、論理和になる。
A | B | 光 | |
1 | 1 | 1 | |
1 | 0 | 1 | |
0 | 1 | 1 | |
0 | 0 | 0 |
階段の電灯のスイッチとして使うためには、AもBも1のときに光が消えてくれなければならない。つまり、
A | B | 光 | |
1 | 1 | 0 | |
1 | 0 | 1 | |
0 | 1 | 1 | |
0 | 0 | 0 |
これは、排他的論理和に他ならない。
A | B | 光 | |
上 | 上 | 暗 | |
上 | 下 | 明 | |
下 | 上 | 明 | |
下 | 下 | 暗 |
この回路なら、1階にいても2階にいても、電灯を点けることも消すこともできる。2つのスイッチの方向を互い違いにすればいいのである。この回路は、電流を流すか流さないかの2値のスイッチではなく、並列した線のどちらに流すかを決める2個のスイッチを用いてつくることができる。
しかし、考えてみると、同じことは明暗を引っくり返しても実現できるはずである。つまり、
A | B | 光 | |
上 | 上 | 明 | |
上 | 下 | 暗 | |
下 | 上 | 暗 | |
下 | 下 | 明 |
この場合は、2つのスイッチの向きが一致しているときに灯りが点く。1と0で表現すると、
A | B | 光 | |
1 | 1 | 1 | |
1 | 0 | 0 | |
0 | 1 | 0 | |
0 | 0 | 1 |
論理学ではこれを「等値」と呼ぶ。
2つのスイッチの方向が一致しているというのが等値で、一致していないというのが排他的論理和なのだから、排他的論理和の否定が等値と等値である(Not(A EOR B) = (A = B))、というのは当たり前だ。一致していなくない、というのは、一致している、ということなのだから。
実は、排他的論理和の否定が等値であるということをこれまで意識したことがなかった。プログラミングにおいても、いたずらにややこしい表現をしていたと思う。例えば、
IF (A = True AND B = False) OR (A = False AND B = True) THEN
のようにである。これは、
IF A <> B THEN
でよかったのである。