日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年2月21日土曜日

論理演算 (2) なぜANDは論理「和」ではないのか?

論理演算を勉強していると、不思議に思うのが
ANDが「論理」で、ORが「論理」となっていること。

逆じゃないのか?と思う。
特にANDはどう考えても自分の感覚では「AND」=「プラス」、すなわち「論理和」である。


こんなことを考えるのは自分一人かと思っていたら
若干ポイントは違うが、同じような疑問を持った人がいた。

2つの条件PとQがあったときに‥
Pに当てはまるグループと、Qに当てはまるグループの
両方合わせたグループを、PとQの「論理和」と言います。
「P or Q」とか「P または Q」と表現します。

自然言語の場合は‥ and を使うような気がします。例をあげると
英語だと"Ladies and Gentlemen"。
日本語だと「Pの皆さま ならびに Qの皆さま」。
(アジャイル日記 and/or より)


wikiでも「論理和」の説明で日常会話の言葉との違いにふれている。

二つの命題 P, Q に対する論理和を P ∨ Q と書き、「P または Q」と読む。
後述のように、日常会話における「または」とは意味が異なるので注意が必要である。

日常会話において「または」と言った場合、排他的論理和を意味する場合が多い。
例えば、レストランにおいて「コーヒーまたは紅茶が付きます」と言えば、
通常どちらか一方のみであることを意味する。


--------------------
やっぱり変?? 「OR」は「+」? なんで?

論理式を表現する記号として、+(プラス、またはオア)や・(ドット、またアンド)を用います。
第3章 論理関数(その1)

ややこしいのでまとめてみた。
「AND」/ 「論理積(Logical conjunction(結合))」 「・」 「積集合(Intersection)」
-----------------------------------------------------------------------------------------
「OR」/ 「論理和(Logical disjunction(分離、離接))」 「+」  「和集合(Union)」

(ANDの記号は「*」のほうが適切な気もするが、数学でも基本的に積は「・」が使われるらしい。)

どうやら英語から日本語への翻訳課程での違いではなく
英語でも記号表記に食い違いが見られる。
(すでに「AND」は「+」ではなくなっている。)

この食い違いは、
日本語だと、
AND - 論理積
OR - 論理和

でみられるが、
英語では、その部分には食い違いはなく、「積集合」「和集合」の部分で、はじめて違いが表れる。

もしかしたらそこに謎を解くかぎがあるのかもしれないが、そこはさておき、
とりあえず、いまある疑問。

疑問1) 「なぜANDなのに「論理積」なのか?」
疑問2) 「なぜORなのに「論理和」なのか?」

AND=「論理和」=「+」
とうことならすべてすっきり!納得!!なのだが...。



--------------------
英語と日本語?

英語で見ると「AND」は「論理積」を意味する「Logical Conjunction(結合)」であり、
意味的な違いはみられない。
でも「積集合」の英語は
「Intersection(交点、共通集合)」と食い違いが出てくる。

要するに「AND」=Logical Conjunction 
<-> Intersection、 「・」
という対応になっている。

「OR」でも同様に、「OR」=
「Logical disjunction(分離、離接)」と意味的に一致するが、
「和集合」の英語は「Union(結合、和合)」という具合に食い違う。


Wikiでそれぞれの定義を見ると、
論理積(AND)」は 「数理論理学において論理積(ろんりせき)とは(以下略)」
積集合」は 「数学において、集合族の積集合(以下略)」
(注
数理論理学とは、論理を数学によって研究する学問である。記号論理学とも言う。(wiki)

というふうに、その定義する学問の領域がことなっている。
「AND」「Logical Conjunction(結合)」は記号論理学の範疇であり、
「Intersection(積集合)」は数学の範疇である。

ようするに対象とする物は同じでも、
それを分析する学問の範疇がちがい、見る角度が違うことで、
違う名前になってしまったのだろうか。


また、おそらく日本にこの論理演算が輸入されたときには、
すでに、「Logical Conjunction」は「Intersection」と同意ということで、記号も「・」が使われていたはず。
英語から日本語に訳すときに、直訳するよりもこの点に留意して「論理積」と意訳されたのかもしれない。

このことは「論理和」にもあてはまる。

結果的に日本人になじみのない「AND」と「OR」という英単語が一人歩きするだけですみ、
日本人にとって、混乱が少なくなかったかもしれない。

以上は、言葉上の違いの原因を探った物で、
ANDの記号が「・」を使い、ORの記号が「+」
を使う理由は、未だに不明だ。


--------------------

AND、「積集合」

与えられた集合の集まり全てに共通に含まれているような要素を全て集めることにより得られる集合のことである。(wiki)

たとえば、与えられた集合が「A」と「B」とすると、「Aと(AND)Bの両方に含まれる要素からなる集合」
ということである。

これは、二進数の計算結果
0x0=0
0x1=0
1x0=0
1x1=1
と一致する。

ここで、Electronic Journal1671号(ブール代数とクロード・シャノンの説明を引用したい。
第1は「AND演算」です。
 「A AND B = C」という数式について考えます。
これは「~かつ~」という意味になります。
論理学的な言葉でいうと、「Aが正しくかつBも正しいときだけ、Cも正しい」ということになります。

よくある「AND」の説明は「AかつB」という説明しかないが、
この説明には「C」という要素がふくまれている。
ANDは演算なので、使えばかならずその結果がある。
そのことを思い出させてくれる、よい説明だと思う。
そして「論理学的には」、このような説明になると言っている。

ようするに「AND」というのは、論理学における英文章からきていて
それを数学的に表現すると「積集合」になり、
その両者をあわせた論理数学では、ANDは論理演算的「積」になるということではないか?


--------------------

和集合(wiki)
二つ以上の集合の集まりに対して、それらのいずれか少なくとも一つに含まれているような要素を全て集めることにより得られる集合のことである。

これは、Aまたは(OR)Bのどちらかに含まれる要素からなっている集合」とういことである。

二つの集合が交わているところでは、AまたはBのどちらかをとるので「OR」といえる。

これを二進数の式で表すと
0+0=0
0+1=1
1+0=1
1+1=1
となる。

論理和では1+1=1と論理演算独自のルールにしたがった「和」である。


ここで、先ほどのElectronic Journal1671号(ブール代数とクロード・シャノン)をみると

第2は「OR演算」です。
これは「~または~」という意味になります。
同じ数式について考えると、「AかBのどちらかが正しければCは正しい」ということになります。


「OR」は「どちらか」という意味で、文章で表現すると上記のように「か」で合っている。
ただWikiでも述べられているが、文章の「か」は、どちらかひとつにみを選択することを意味する。

日常会話において「または」と言った場合、排他的論理和を意味する場合が多い。
例えば、レストランにおいて「コーヒーまたは紅茶が付きます」と言えば、
通常どちらか一方のみであることを意味する。


しかし、上記の説明はそのすべての矛盾を解決している。
「OR(または)」の使い方はそのままで、「C」が正しい(True)ということを意味する。
ようするに論理的な文章では、「OR」の使い方は間違っていない。
ただそれをそのまま記号的に論理演算の名称としたのはWikiにもあるように矛盾を連想させ、
適切でなかったかもしれない。




--------------------
自分なりに考え見たが、疑問に対しての答えは、以下の結論となった。
(2月21日に改訂したので改訂後を「新」とし、改訂前を「旧」とした。)

疑問1) 「なぜANDなのに「論理積」なのか?」
疑問2) 「なぜORなのに「論理和」なのか?」

答え(新):
AND、ORはその論理を文章であらわしたとき 意味はあっている。

その論理は、二進計算での「積」と「和」の結果と一致する。
ただし「和」については論理演算独自のルールがあるので、論理積、論理和という言葉 になる。

集合として考えたときに、「AND」は交点(Intersection)、「OR」は結合(Union)である。
「AND」はともかく「OR」は「+」と表現しても意味的に問題はない。


結論として、「AND」は論理を文章表現したときのその文章に含まれる単語で、
論理演算で表現するときには「論理積」となり同じ現象を異なる学問の分野で違った表現をしているために違う言葉となっている。
簡単に言うと、それぞれの単語は、異なる学問分野での表現の違いからきている。
意味的には同じ物を示している。


答え(旧):
要はそれぞれの言葉、記号を使うときの着眼点が違っているとういこと。
同じ事を表現しようとしているのだが、どこに着目するかで、異なる表現となってしまっている。


いろいろな論理演算の説明では、
こういったことばの定義の微妙なくい違いが説明されていないため、
細かな違和感がかさなり論理演算の理解がしづらくなっているような気がする。
それがプログラミングを習得するための敷居を高くする一因になっているのかもしれない。

0 件のコメント:

コメントを投稿