bitGateLab Digital · 学ぶ
日本語
シミュレータを開く

学ぶ › トピック 2

ブール代数:法則、ド・モルガンの定理、簡単化

読了時間:約 7 分 · bitGateLab チーム

ブール代数は、デジタル回路を記述し、変形するための言語です。式の一つひとつがゲートの組み合わせに対応していて、簡単化のために法則を一つ適用するたびに、その分だけゲートを節約できます。この記事では、公理、よく使う法則、ド・モルガンの定理をおさらいし、一手ごとに根拠を示しながら式を段階的に簡単化する方法を学びます。

変数と演算

ブール変数が取る値は 0 と 1 だけです。基本演算は三つあります。否定(A、NOT ゲート)、論理積(A·B または AB、AND ゲート)、論理和(A + B、OR ゲート)です。かっこがない場合の優先順位は、否定、積、和の順です。したがって A + BC は、ふつうの代数と同じく A + (B·C) を意味します。

公理

ブール代数全体は、いくつかの公理の上に成り立っています。和についてのものと積についてのものが、対になっていることに注目してください。

公理和の形積の形
同一則A + 0 = AA · 1 = A
交換則A + B = B + AAB = BA
分配則A + BC = (A + B)(A + C)A(B + C) = AB + AC
補元則A + A = 1A · A = 0
双対性の原理:ある等式が成り立つなら、+ と · を入れ替え、0 と 1 を入れ替えた等式も成り立ちます(変数とそのバーには手を付けません)。どの法則にも「双子」の形があるのはそのためです。和の分配則 A + BC = (A + B)(A + C) を見てください。実数の代数にはない法則ですが、ブール代数では完全に正しい等式です。

役に立つ法則と定理

公理からは次の規則が導かれます。簡単化でいちばんよく使うのはこれらです。

法則和の形積の形
べき等則A + A = AAA = A
零則A + 1 = 1A · 0 = 0
対合則(二重否定)A = A
結合則A + (B + C) = (A + B) + CA(BC) = (AB)C
吸収則A + AB = AA(A + B) = A
補元の吸収則A + AB = A + BA(A + B) = AB
隣接則AB + AB = A(A + B)(A + B) = A
コンセンサスの定理AB + AC + BC = AB + AC(A + B)(A + C)(B + C) = (A + B)(A + C)

これらの法則はどれも、真理値表で確かめられます。二つの列がすべての行で一致すれば、その等式は正しいということです。たとえば A + AB = A の場合、A = 0 なら B に関係なく両辺とも 0、A = 1 なら両辺とも 1 です。補元の吸収則は、和の分配則を使って次のように証明できます。A + AB = (A + A)(A + B) = 1·(A + B) = A + B。

ド・モルガンの定理

この二つの定理は、長いバーの「切り方」を教えてくれます。

実用的な覚え方はこうです。バーを切るときは、その下にあった演算を入れ替え(· を + に、+ を · に)、各項を否定します。変数がいくつあっても成り立ちます。ABC = A + B + C。

ABABA + BA + BAB
001111
011100
101100
110000

回路で考えると、ド・モルガンの定理は、NAND が「入力に丸印の付いた OR」と等価であり、NOR が「入力に丸印の付いた AND」と等価であることを示しています。これは、どんな設計でも NAND だけ、または NOR だけの回路に変換するための基礎で、論理ゲートの記事で説明しています。

例 1:ド・モルガンの定理を使う。 F = AB + C を簡単化します。

  1. 長いバーは和全体にかかっています。AB + C = AB · C。
  2. 積にかかるバーを切ります。AB = A + B。
  3. 結果:F = (A + B)C = AC + BC。

A = 1、B = 1、C = 0 で検算します。元の式は 1 + 0 = 0、結果の式は (0 + 0)·1 = 0 です。A = 0、B = 1、C = 0 では、元の式が 0 + 0 = 1、結果の式が (1 + 0)·1 = 1 です。

代数的な簡単化を一歩ずつ

簡単化とは、項の数とリテラル(否定の有無にかかわらず、変数が現れる一つひとつの箇所)の数を減らすことです。リテラルが減れば、ゲートの入力も減ります。代数だけで解く場合、決まった一つのアルゴリズムはありませんが、次の作戦はほとんどの場合に有効です。

例 2。 F = AB + AB + AB を簡単化します。

  1. 最初の二項をくくります。AB + AB = A(B + B) = A·1 = A。
  2. F = A + AB が残ります。
  3. 補元の吸収則:A + AB = A + B。

F = A + B です。AND ゲート三つ、3 入力 OR 一つ、インバータ二つの回路が、OR 一つになりました。

例 3:多数決関数。 F = ABC + ABC + ABC + ABC を簡単化します。

  1. べき等則により、ABC = ABC + ABC + ABC です。コピーを三つ書いて、それぞれを隣の項と組み合わせます。
  2. ABC + ABC = BC(A + A) = BC。
  3. ABC + ABC = AC(B + B) = AC。
  4. ABC + ABC = AB(C + C) = AB。

F = AB + AC + BC です。三つの入力のうち少なくとも二つが 1 のときに 1 になる、多数決回路です。これは全加算器のキャリー出力でもあることを、あとで学びます。

例 4:和の分配則。 F = (A + B)(A + C) を簡単化します。

  1. 展開します。AA + AC + AB + BC = A + AC + AB + BC。
  2. A でくくります。A(1 + C + B) + BC。
  3. 零則:1 + C + B = 1 なので、A + BC が残ります。

これはまさに、公理である和の分配則を逆向きに読んだものです。

よくある間違い

シミュレータで試してみよう

正しく簡単化できていれば、できあがる回路の真理値表は元の回路とまったく同じになります。シミュレータを使えば、表を手で書かなくても確かめられます。

  1. 例のどれか、たとえば AB + AB + AB の元の回路を、入力と出力を付けてエディタで組みます。
  2. その真理値表を生成して、書き留めます。
  3. 同じキャンバスの別の出力として、簡単化した回路(A + B)を同じ入力につないで組みます。
  4. 入力をすべての組み合わせに切り替え、二つの出力が常に一致することを確かめます。
  5. 真理値表から簡単化した式を求め、手で導いた式と比べます。

練習問題

  1. F = AB + AB + AB を簡単化してください。
    解答

    AB + AB = A です。次に A + AB = A + B(補元の吸収則)。F = A + B = AB となり、これは NAND です。

  2. F = A + B を簡単化してください。
    解答

    ド・モルガンの定理より、A · B = AB。

  3. F = A(A + B) + B(B + C) を簡単化してください。
    解答

    吸収則により、A(A + B) = A、B(B + C) = B です。F = A + B。

  4. コンセンサスの定理 AB + AC + BC = AB + AC を証明してください。
    解答

    BC = BC(A + A) = ABC + ABC と書きます。すると AB + ABC = AB(吸収則)、AC + ABC = AC(吸収則)です。AB + AC が残ります。