論理演算入門

「論理演算」とは「命題」を対象とした演算です。 「命題」とは、真(正しいこと、True)か偽(間違っていること、False)かを判断できる文や式のことです。

例えば「5は3より大きい」(正しい=真)や「3は5より大きい」(間違っている=偽)などが命題です。

論理演算の種類

よく使われる論理演算の種類は、以下の4つです。

  • and(かつ、論理積)
  • or(または、論理和)
  • not(でない、否定)
  • xor(排他的にまたは、排他的論理和)

各演算の結果

A and B

「AかつB」という意味なので、AとBの両方が真(True)のとき真(True)となり、その他の場合は偽(False)になります。

A or B

「AまたはB」という意味なので、AとBのいずれかが真(True)あるいは両方とも真(True)のときに真(True)となり、両方とも偽(False)の場合は偽(False)となります。

not A

「Aでない」という意味なので、Aが真(True)なら偽(False)になり、Aが偽(False)なら真(True)になります。

A xor B

「A排他的にまたはB」という意味です。 ここで「排他的(他を排除する)」というのはAかBの一方だけという意味なので、AとBのいずれか一方だけが真(True)のときだけ真(True)となり、その他の場合(両方とも真(True)か両方とも偽(False)の場合)は偽(False)になります。

各演算結果の一覧

以下にand、or、not、xorの演算結果を一覧表で示します。

  1. and(論理積、かつ)
A \ B 真(True) 偽(False)
真(True) 真(True) 偽(False)
偽(False) 偽(False) 偽(False)
  1. or(論理和、または)
A \ B 真(True) 偽(False)
真(True) 真(True) 真(True)
偽(False) 真(True) 偽(False)
  1. not(否定、でない)
真(True) 偽(False)
偽(False) 真(True)
  1. xor(排他的論理和、排他的にまたは)
A \ B 真(True) 偽(False)
真(True) 偽(False) 真(True)
偽(False) 真(True) 偽(False)

論理演算は、プログラムの分岐処理(ifwhileなど)で、いくつかの条件(条件は命題の一種です)を結びつけたり、条件を否定したりするときに使われます。

真(True)と偽(False)を10の数値に対応させると、論理演算は2進数の演算であるとみなせます。 例えば、真(True) and 真(True)は、1 and 1 = 1という2進数の演算とみなせます。 コンピュータの内部では、電気信号で表された2進数を演算する仕組みとして、論理演算が使われています。

ド・モルガンの法則

ド・モルガンの法則は、論理式を変形する法則です。 以下にド・モルガンの法則を示します。

法則1

not (A and B) = (not A) or (not B)

「A and Bの結果をnotした論理式は、not Aとnot Bをorした論理式と等しい」

これを図で示します。 なお、図の中でandは、orは、notはで表します。

  • 左辺の not (A and B)から考えます
  • まず、A and Bを図で表すと、下の図4の左のようになります
  • したがって、not (A and B)は図4の右のようになります

図4

  • 一方右辺の(not A) or (not B)
  • 下の図5の左上の(not A)と左下の(not B)orしたものなので
  • (not A) or (not B)は図5の右のようになります

図5

図4の右側と、図5の右側は等しいので、法則1が成り立つことがわかります。

法則2

not (A or B) = (not A) and (not B)

「A or Bの結果をnotした論理式は、not Aとnot Bをandした論理式と等しい」

  • 左辺のnot (A or B)から考えます
  • まず、A or Bを図で表すと、下の図1の左のようになります
  • したがって、not (A or B)は図1の右のようになります

図4

  • 一方右辺の(not A) and (not B)
  • 下の図2の左上の(not A)と左下の(not B)andしたものなので
  • (not A) and (not B)は図2の右のようになります

図5

図1の右側と、図2の右側は等しいので、法則2が成り立つことがわかります。

問題1

PQR真(True)偽(False)の値を持つ命題です。

  • P = 真(True)
  • (not P) or Q = 真(True)
  • (not Q) or R = 真(True)

のとき、QRはそれぞれ真(True)偽(False)のどちらでしょうか?

答え
  • P = 真(True)なので(not P) = 偽(False)です。
  • したがって、(not P) or Q = 真(True)偽(False) or Q = 真(True)です。
  • 偽(False)orした結果が真(True)ということは、Q = 真(True)になります。
  • Q = 真(True)とわかったので、(not Q) = 偽(False)です。
  • したがって、(not Q) or R = 真(True)偽(False) or R = 真(True)です。
  • 偽(False)orした結果が真(True)ということは、R = 真(True)になります。

以上のことから、RQはどちらも真(True)になります。

問題2

この問題はド・モルガンの法則を使って複雑な論理式をシンプルに変形する問題です。

論理式not (((not A) or B) and (A or (not C)))と等しいのはどの論理式でしょうか。

  1. (A and (not B)) or ((not A) and C)
  2. ((not A) and B) or (A and (not C))
  3. (A or (not B)) and ((not A) or C)
  4. ((not A) or B) and (A or (not C))
答え
  • not (((not A) or B) and (A or (not C)))

    ((not A) or B)X(A or (not C))Yにそれぞれ置き換えると not (X and Y)となります。 これを(not X) or (not Y)に変形し、XYを元に戻すと以下のようになります。

  • (not((not A) or B)) or (not(A or (not C)))

    式の前半で(not A)XBYにそれぞれ置き換えるとnot (X or Y)となります。 これを(not X) and (not Y)に 変形し、XYを元に戻すと以下のようになります。

  • (not(not(A)) and (not B)) or (not(A or (not C)))

    not(not(A)) = AなのでAに変形すると以下のようになります。

  • (A and (not B)) or (not(A or (not C)))

    式の後半でAX(not C)Yにそれぞれ置き換えるとnot (X or Y)となります。 これを(not X) and (not Y)に 変形し、XYを元に戻すと以下のようになります。

  • (A and (not B)) or (not(A) and not(not(C)))

    not(not(C)) = CなのでCに変形すると以下のようになり、1の式と一致します。

  • (A and (not B)) or (not(A) and C)

    したがって、正解は1となります。