ブール代数                            戻る

 数学において、集合や命題を考えるとき、両者には実は同一の性質・法則が成り立ってい
ることに気がつく。

例 ド・モルガンの法則によれば、2つの集合 A,B に対して、

                  

が成り立つ。このことと同様の事実が、2つの命題 p,q についても、成り立つ。

    ¬(p∨q)=(¬p)∧(¬q)   ¬(p∧q)=(¬p)∨(¬q)

 この事実もまた、ド・モルガンの法則と呼ばれる。(参考:数学の論理

 ブール(Boole 1815〜1864)は、このような類似性を一般化して、次のようなブール代数を
考案した。

 集合 B には、異なる2つの要素 が含まれ、さらに、ab , ab ,a のような演算
が定義されているものとする。
 任意の a、b、c ∈ B に対して、次の法則が成り立つとき、B は、ブール代数と呼ばれる。
(1)・・・交換律   a+b=b+a   a*b=b*a
(2)・・・分配律   a+(b*c)=(a+b)*(a+c)   a*(b+c)=(a*b)+(a*c)
(3)・・・同一律   a+0=a      a*1=a
(4)・・・補元律   a+a’=1     a*a’=0

(注) 2つの要素 0、1 は、普通それぞれ、最小元、最大元と呼ばれる。また、+は和、*は
   積にそれぞれ相当するが、差や商に相当するものはない。

ブール代数の代表的な例   B={0、1} とし、演算を次のように定義する。

 このとき、B は、ブール代数になる。

これは、デジタル計算機の内部で行われている演算そのものである。

 ところで、「1」を、命題が真であること、「0」を、命題が偽であることと読みかえれば、上の
演算表は、
        「+」という演算は、「または」を、
        「*」という演算は、「かつ」を、
        「’」という演算は、「〜でない」という論理を表していると解釈することもできる。

 このブール代数は、推理問題を手際よく解く方法として利用される。

例 今、1つの事柄について、2つの矛盾した証言があるとする。
 ある人は、「その事柄は、Aであり、Bである。」といい、
また、別な人は、「その事柄は、Bであり、Cである。」といった。
2人とも1つは正しいことをいい、1つは間違ったことをいっているものとする。

 このとき、明らかに、Bが正しい事柄であるが、ブール代数を用いると、次のような機械的
な計算で、「正しい事柄はBである」ということが分かる。

 条件から、A*B=0、B*C=0、A*C=0 である。また、A+B=1、B+C=1 なので、
(A+B)*(B+C)=1 が成り立つ。交換律と分配律と同一律を用いて、
(A+B)*(B+C)=(B+A)*(B+C)=B+A*C=B+0=B なので、B=1 となる。
 したがって、Bが正しい事柄である。

 上記の例は、ブール代数の使い方を例示するものとして、自明な場合を想定したが、次の
場合はどうだろうか?多分、「エッ?」という人が多いのではないかと思う。これに対しても、
ブール代数の知識があれば、鮮やかに問題を解決することができる。

例 ある人物について、A、B、C の3人は、次のように証言した。
  A:「たしか、名前は、大場さんといい、年は、35歳」
  B:「たしか、名前は、小塚さんといい、年は、30歳」
  C:「たしか、名前は、大場さんではなく、年は、40歳」
3人とも、名前、年齢のどちらかは正しいことをいい、どちらかは間違ったことを言っているも
のとする。さて、ある人物の名前と年齢は、なんであろうか?

(解) a=「名前は、大場さん」、b=「名前は、小塚さん」、c=「名前は、大場さんでない」
    d=「年齢は、35歳」、e=「年齢は、30歳」、f=「年齢は、40歳」 とすると、
  題意より、次の各式が成り立つ。
    a*d=0、b*e=0、c*f=0
    a+d=1、b+e=1、c+f=1
    a*b=0、a*c=0、d*e=0、e*f=0、d*f=0
  このとき、
    (a+d)*(b+e)=((a+d)*b)+((a+d)*e)
               =(a*b)+(b*d)+(a*e)+(d*e)
               =0+(b*d)+(a*e)+0
               =(b*d)+(a*e)
  であるので、
          (b*d)+(a*e)=1
  が成り立つ。
   よって、さらに、
    (c+f)*((b*d)+(a*e))=((c+f)*(b*d))+((c+f)*(a*e))
                      =(b*c*d)+(b*d*f)+(a*c*e)+(a*e*f)
                      =(b*c*d)+(b*0)+(0*e)+(a*0)
                      =(b*c*d)+0+0+0
                      =b*c*d
  であるので、
           b*c*d=1
  が成り立つ。
   したがって、b、c、d が、正しい事柄であることが分かり、

  ある人物の名前は、「小塚さん」であり、年齢は、「35歳」ということになる。

 このように、ブール代数は、ちょっと見た目にはすごく複雑に見えるような問題を解くのに役
立つ。

(参考文献:Seymour Lipschutz 著 成嶋 弘 監訳 離散数学 (オーム社)
        J.A.H.ハンター J.S.マダチー 著 田中 勇 訳
                                    数学レクリエーション(白揚社))