カルノー図

読了時間 5 分
← Back

1. カルノー図とは

カルノー図とは、真理値表を格子として描き直したものです。1953 年にベル研究所のモーリス・カルノーが、スイッチ回路を目で見て簡単化するために考案しました。小さなブール関数を手で最簡化する方法としては今も最速です。代数も、覚えるべき法則も要らず、必要なのは長方形だけです。

図の各マスは真理値表の 1 行にあたります。単なる並べ替え以上のものにしているのは、その行の並べ方です。隣り合うマスは、ちょうど 1 つの変数だけが異なります。

この性質だけで話は済みます。隣り合う 2 つのマスがともに真なら、その間で変化する変数は式を真にしている原因ではありえません。だからその変数は消え、1 つの項が両方のマスを覆います。簡単化とは、できるだけ大きな長方形を描くことになるのです。

2. 列の並びが妙に見える理由

カルノー図の列は 00、01、10、11 とは数えません。00、01、11、10 と進みます。これは反射型グレイコードで、隣り合う値が 1 ビットだけ異なる並べ方です。二進法どおりに数えると 01 の隣が 10 になり、2 ビット違ってしまうため、隣り合うマスから何も読み取れなくなります。

3 変数の図。行が A、列が B と C。各マスの小さな数字は、そのマスが持つ真理値表の行番号です。
A \ BC00011110
00132
14576

端どうしも隣り合っています。左端と右端の列は 1 変数しか違わず、上端と下端の行も同じなので、グループは片方の端から出て反対側へ続けられます。4 変数の図で四隅が 1 つのグループになるのはこのためです。カルノー図は本当はトーラスの上に描かれており、平らな紙面は便宜にすぎません。

3. 1 をまとめる

図から最簡の積和形を読み取るには、1 のマスをすべて長方形のグループで覆います。規則は 4 つです。

  • グループは 1、2、4、8 … 個のマスからなる長方形で、各辺の長さは 2 のべき乗です。
  • グループは図の端をまたいで回り込めます。横方向でも縦方向でも、その両方でもかまいません。
  • グループどうしは重なってかまいません。二重に覆っても損はありませんが、覆い残しがあると関数が変わってしまいます。
  • 各グループはできるかぎり大きくし、そのうえで、すべての 1 を覆えるかぎり少ない数のグループにします。

グループ 1 つが項 1 つになります。読み方は、グループ全体で値の変わらない変数を探すこと。その変数が項に現れ(1 ならそのまま、0 なら否定)、変化する変数はすべて消えます。2 マスのグループでは変数が 1 つ、4 マスでは 2 つ、8 マスでは 3 つ減ります。最簡の式は、これらの項の選言です。

4. 例題

(A ∧ B) ∨ (¬A ∧ C) ∨ (B ∧ C ∧ D) を考えます。図は 4 変数で、行が A と B、列が C と D です。

(A ∧ B) ∨ (¬A ∧ C) ∨ (B ∧ C ∧ D) の図。16 マスのうち 8 マスが 1 です。
AB \ CD00011110
000011
010011
111111
100000

2 つのグループですべての 1 を覆えます。1 つは A = 0 の 2 行と C = 1 の 2 列が交わる 4 マスの塊です。この中では B と D が変化するので消え、項は ¬A ∧ C になります。もう 1 つは A と B がともに 1 の行全体で、4 列すべてにわたります。C と D が変化するので、残るのは A ∧ B です。

したがって最簡形は (¬A ∧ C) ∨ (A ∧ B) です。元の式の 3 番目の項 B ∧ C ∧ D は消えました。その項が覆っていたマスは、すでに 2 つのグループのどちらかが覆っていたからです。吸収律を目に見える形にすると、これになります。

計算機で試す
(A ∧ B) ∨ (¬A ∧ C) ∨ (B ∧ C ∧ D)

5. 主項と必須主項

これ以上大きくできないグループを主項(プライムインプリカント)と呼びます。主項を列挙するのは問題の易しい半分で、どれを残すかを選ぶ方が失敗しやすい半分です。

あるマスを覆う主項が 1 つしかないなら、その主項は必須です。そのマスを覆うものが他にない以上、どんな最簡形からも外せません。まず必須主項を取り、残りのマスを、残った主項のうちできるだけ少ない数で覆います。

貪欲に進めること、つまり毎回いちばん大きなグループを取ることは魅力的ですが、いつもうまくいくとは限りません。どの主項も必須でなく、すべてのマスが二重に覆われる循環表では、貪欲な選択が最良解より 1 項多くなることがあります。このサイトの図は代わりに残る選択肢をすべて調べます。4 変数ならその手間はほぼゼロです。

6. 代わりに 0 をまとめる

ここまでの話は 0 についてもそのまま成り立ちます。同じ長方形で 0 を覆い、各グループをリテラルを反転して読み(グループ全体で 1 の変数は否定、0 の変数はそのまま)、グループどうしを ∨ ではなく ∧ でつなぎます。

できあがるのは和積形です。選言の連言で、式が偽になるマスでちょうど偽になり、それ以外では真になります。どちらの形が短いかは関数しだいで、1 の少ない式は積和形が短く、0 の少ない式は和積形が短くなります。決める前に図から両方を読んでみる価値があります。

7. より大きな図と、ドントケア

5 変数や 6 変数は、4 変数の図を 2 枚または 4 枚重ねて描き、隣り合う層の同じ位置のマスを隣接とみなします。可能ではありますが、この方法を目で見て分かるものにしていた隣接関係が、見るものではなく覚えるものになってしまいます。それ以上は、クワイン・マクラスキー法が同じ仕事を表の形で行います。まさにこのグループ化を機械化したもので、このサイトの図の背後でも動いています。

ハードウェア設計ではもう 1 つ考え方が加わります。決して現れない入力の組み合わせがあり(二進化十進数の桁が 1010 になることはありません)、その場合に回路が何を出力しようと設計者は気にしません。そうしたマスは X と記し、グループがより大きくなる方の値として読んでかまいません。この計算機の図は式から作られ、どの割り当てにも値があるので、ドントケアのマスは現れません。

8. 実際に試す

2 変数から 4 変数までの式を計算機に入力すると、真理値表の下に図が描かれ、各グループがそれぞれの色で囲まれ、その下に最簡形が示されます。和積形に切り替えれば、0 がまとめられる様子を見られます。

読んだ内容を練習する

5 問

このガイドを実際に使ってみましょう。ここでの練習問題は読んだばかりの内容をそのまま扱い、どれからでもこのガイドに戻れます。

  1. 難易度: 上級次の式を簡単化してください: (A & B) | (A & !B)
  2. 難易度: 上級コンセンサス定理を用いて次の論理式を簡略化してください: (A & B) | (!A & C) | (B & C)
  3. 難易度: 上級次の式を選言標準形(DNF)に変換してください: (A -> B) & C 各項はリテラルの連言であり、選言で接続されている必要があります。
  4. 難易度: エキスパート次の4変数の論理式を最小化してください: (A & B & C & D) | (A & B & C & !D) | (A & B & !C & D) | (A…
  5. 難易度: エキスパート以下の式を最小化してください: (A & B & C) | (A & B & !C) | (A & !B & C)
すべての練習問題を見る

ステップ 8/15中級

15 件中 0 件のガイドを読了
すべてのガイド