安敦誌


つまらない話など
by antonin
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
検索
最新の記事
水分子と日本人は似ている
at 2016-06-04 01:49
ほげ
at 2015-06-05 03:46
フリーランチハンター
at 2015-04-17 01:48
アメリカのプロテスタント的な部分
at 2015-04-08 02:23
卯月惚け
at 2015-04-01 02:22
光は本当に量子なのか
at 2015-03-17 23:48
自分のアタマで考えざるを得な..
at 2015-03-06 03:57
折り合い
at 2015-03-01 00:19
C++とC#
at 2015-02-07 02:10
浮世離れ補正
at 2015-01-25 01:21
記事ランキング
タグ
(294)
(146)
(120)
(94)
(76)
(64)
(59)
(54)
(45)
(40)
(40)
(39)
(32)
(31)
(28)
(27)
(25)
(24)
(22)
(15)
最新のコメント
>>通りすがり ソ..
by Appleは超絶ブラック企業 at 01:30
>デスクトップ級スマート..
by 通りすがり at 03:27
7年前に書いた駄文が、今..
by antonin at 02:20
助かりました。古典文学の..
by サボり気味の学生さん at 19:45
Appleから金でも貰っ..
by デスクトップ級スマートフォン at 22:10
以前の記事

1+1は2か3か

「イチたすイチは~ ニかサンか~」とか歌っているCMが昔にあったような記憶がある。子供向けの文具か教材か、そんなようなCMだったと思うが、どんな内容なのかはすっかり忘れてしまった。それなのに、この「1+1は2か3か」という文句だけが記憶に残っている。

ブール代数を初めて知ったとき、1+1が2ではなく1になるという演算があるのを知って楽しかった覚えがある。そういう流れで、この「1+1は2か3か」という冗談のような歌が妙に気になっていたのだろう。1+1が2というのはごく普通の算術演算だとして、1+1が3というのは、いったいどんな演算がありうるんだろうと気になっていた。

それから長い年月が流れたが、去年のあるあたりに、ふとひらめいたことがあって、なんとか1+1が3になる演算を考えついた。そのあたりをダラダラと書いていこうと思う。

1+1=1 というブール演算は、そもそも数値として0と1しか存在しない。自然数の集合がアレフゼロという無限の個数なのに対して、ブール束の元は2個しかない。1+1=3となる代数系に似たような制限を掛けるとしても、0,1,2,3と最低でも4個の数値は必要になりそうで、これは面倒だった。しかし、よく考えてみると、今は足し算だけで掛け算は必要ないわけだし、乗算の零元である0というのは必要ないかもしれない。「1+1は2か3か」という歌にも1と2と3しか出てこないのだから、今考えようとしている代数系の元は3個で十分なのかもしれない。

というところまで考えて、ブール代数のようなロジックにトライステート ロジックというのがあったな、ということを思い出した。通常のロジック(論理)が「真」と「偽」だけを使うのに対し、トライステート ロジックというのは、第三の状態である「どっちでもいい」という状態を持った論理回路のことを指す。

デジタル回路 #スリーステート・バッファ - Wikipedia

学生時代には確かに「トライステート」と習った覚えがあるのだが、上記ページによると、その呼び方はナショセミの登録商標だったらしく、知財フリーな辞書表現だと「スリーステート」となるようだ。ジェットエンジンの「アフターバーナー」がGEの登録商標だと知ったときと似たような、微妙な感じがして面白い。

ともかく、トライステートというのには、真か偽かはっきり決まる状態以外にも「ハイインピーダンス」という状態があって、真か偽かの決定は接続先かデフォルト設定に任せるという、独特の出力状態のある論理回路になっている。委任票というのか、結論を相手に任せるモードを取りうるロジックということで考え方として面白いのだが、この3状態論理というのが今考えようとしている演算に使えそうだった。

トライステートのハイインピーダンス状態というのは、プルアップするのかプルダウンするのか、あるいは別のロジック出力に合わせるのかというあたりは、そのロジックを使って回路を組む設計者に任されている。ところが代数系を考えるときはそういう自由度は面倒なことになるので、ハイインピーダンスではなく「真偽不定」という状態と考えることにしてみる。

A+Bというブール演算は、A or Bという論理演算に相当するので、たとえばA=1、つまり「Aは真である」というのが確定した場合には、Bが0だろうと1だろうと結果は1になる。なので、真偽不定の状態をXと置くと、1+X=1となる。Aが0の場合にはこうはならなくて、結果はBの値に等しくなるから、Bが定まらないうちは結果も定まらない。なので、0+X=Xとなる。A・Bの場合、つまりA and Bの場合には、逆にA=0のときに結果が0に定まって0・X=0となり、A=1のときに結果が不定になって1・X=Xとなる。

この不定値を含んだ3状態論理を使いたいのだが、and にしても or にしても、1+1=3のように、同値の組み合わせから別の状態が出てくる演算にはならない。そこで、ブール代数上で0と0から1が出てくる演算として、「同値」"equivalent" というのを使ってみることにする。この同値というのは、昔の Microsoft 系 BASIC 言語には論理演算子 "EQV" として組み込まれていたのだが、最近はあまり見ない。C言語的に書くと、!(a ^ b) のことで、「排他的論理和」"exclusive or" の否定を取ったものになる。

排他的論理和というのには論理学的な意味があって、「田中さんは家にいますか、それとも会社にいますか」と聞いたときに「会社にいます」と答えた場合、普通は「じゃあ田中さんは家にはいないんだな」と考えるのだが、実は田中さんは町工場の経営者で、自宅兼会社に住んでいるというケースもありうる。この場合、「家にもいるし、会社にもいる」というのを、普通の論理和(or)は許容する。けれどもそれだと自然言語の「または」の意味を正確に記述できない場合があるということで、この排他的論理和というやつが生まれた。

排他的論理和を演算として見ると、結果が1になるのはA=0でB=1の場合と、A=1でB=0の場合だけということになり、「AとBは異なる」という意味にもなっている。同値演算というのはこの逆で、A=0でB=0の場合と、A=1でB=1の場合にだけ、結果が1となる。これに排他的論理和のような古典論理学的な意味付けができるという話は聞いたことがないが、何かあるのだろうか。

話が逸れたが、この同値演算は0+0=1という性質を持っているから、これを3状態論理に持ち込めば、1+1=1の呪縛から逃れることができる。ということで、まず真をT、偽をF、不定をXとして真理値表を作ってみる。

b0004933_00234760.png

「AとBが同じかどうか」なので、片方でも不定になると結果は自動的に不定になる。それで上の図のようになる。

そしていよいよ、このFを1に、Xを2に、Tを3にそれぞれ読み替える。最後に、この同値演算の演算子として無理やり「+」記号を当てはめてみる。すると、こうなる。

1+1=3
1+2=2
1+3=1
2+1=2
2+2=2
2+3=2
3+1=1
3+2=2
3+3=3

なかなか謎めいた、良い演算になった。というわけで、1+1=3という演算は存在する(いま作ったから)。

[PR]
by antonin | 2015-01-24 00:02 | Trackback | Comments(0)
トラックバックURL : http://antonin.exblog.jp/tb/24046516
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
<< 浮世離れ補正 音楽の言語性 >>


お気に入りブログ
外部リンク
外部リンク
ライフログ
ブログパーツ
Notesを使いこなす
ブログジャンル