01
括弧の上に乗った否定 — ド・モルガンは結合子を入れ替える
わかっていること: 式全体にかかった否定。内側へ押し込むと AND は OR に、OR は AND になり、そのついでに各部分が否定されます。
法則: ¬(A ∧ B) = ¬A ∨ ¬B
計算例: !(A & B) は !A | !B と同じ式で、二つの出力の列は 4 行すべてで一致します
このケースを開く: ド・モルガン !(A & B)インタラクティブな数学・理科レッスン (ノ◕ヮ◕)ノ*:・゚✧
論理式 — どの法則がこれを簡単にするのか
二つの式が同じ式であるのは、真理値表が一致するとき、ちょうどそのときだけです。決着をつける試験はそれひとつ。ブール代数の法則とは、見てすぐわかる価値のある一致にすぎません。否定を内側へ押し込む、括弧を展開する、何も変えない項を落とす、そしてほかの項がすでに覆っていた項を見抜く。表を作れば答えは疑いようがなくなります。
01
わかっていること: 式全体にかかった否定。内側へ押し込むと AND は OR に、OR は AND になり、そのついでに各部分が否定されます。
法則: ¬(A ∧ B) = ¬A ∨ ¬B
計算例: !(A & B) は !A | !B と同じ式で、二つの出力の列は 4 行すべてで一致します
このケースを開く: ド・モルガン !(A & B)02
わかっていること: AND は OR に対して、掛け算が足し算に対してするのとまったく同じように分配します。展開すると積の和になり、これが式から回路を組むときの標準形です。
法則: A ∧ (B ∨ C) = (A∧B) ∨ (A∧C)
計算例: A & (B | C) は (B | C) を展開した (A & B) | (A & C) と同じで、3 変数 8 行すべてで一致します
このケースを開く: A & (B | C)03
わかっていること: 一方の項がすでに他方を含んでいるなら、弱いほうは落とせます。A | (A & B) は B が何であれ、ただの A です。
法則: A ∨ (A ∧ B) = A
計算例: A | (A & B) = A。A が 1 の行では出力はどのみち 1 で、A が 0 の行では第 2 項も 0 です
このケースを開く: 吸収法則04
わかっていること: 3 つの項のうち 3 番目が前の 2 つの合意になっている場合。それが覆うのは前の 2 つが合わせて覆う場合だけで、取り除いても表のどの行も変わりません。
法則: (A∧B) ∨ (¬A∧C) ∨ (B∧C) = (A∧B) ∨ (¬A∧C)
計算例: (A & B) | (!A & C) | (B & C) は (A & B) | (!A & C) に等しく、第 3 項は 8 行すべてで余分です
このケースを開く: 合意定理05
わかっていること: すべて 1 の列は恒真、すべて 0 の列は恒偽です。どちらの場合も変数はもう効いていません。
法則: A ∨ ¬A = 1
計算例: A | !A はどちらの行でも 1、その鏡像 A & !A はどちらの行でも 0 です
このケースを開く: トートロジー A | !A2つの変数AとBにおける式は!(A & B)です。結果が1になる行の数を数え、この関数を最小項の和として書き、この1つのゲートだけから何が構築できるかを解き明かしてください。
変数は2つあり、それぞれ0または1の値を自由にとるため、表にはペアごとに1つの行が割り当てられます。パーサーは何かを評価する前にその行数を報告します。なぜなら問題の規模は、その上に書かれた式ではなく変数によって定まるからです。
まず内側の列を埋めます。A & Bは両方の入力が1のときのみ1になるため、3つの行は0、最後の行は1となります。表はこの部分式を結果の隣に独自の列として出力するため、答えだけでなく構文解析結果も確認できます。
NOTはすべてのエントリを反転させ、それ以外の動作は行いません。3つの0は1になり、1つの1は0になるため、結果の列は上の列のちょうど反対となります。
これにより、全4行のうち3行で結果が1となります。分数では0.75となり、パネルには入力の組み合わせに対する割合として表示されます。
真となる各行を、その行でのみ1となり他の行では1とならない連言(すなわち最小項)によって命名し、それら3つをORで結合します。これが主選言標準形であり、ツールが表の下に出力するリストです。
解答
NANDは4行中3行(75.0%)で1となり、その標準形はこれら3つの最小項となります。 ここからが成果です。両方の入力にAを入力すると、A NAND Aは!(A & A)となり、これは!Aに等しくなります——これでNOTが得られました。1つのNANDの出力を別のNANDの両方の入力にフィードバックすると、2つの否定が相殺されるため、(A NAND B) NAND (A NAND B)はANDになります。ORの場合は、まず両方の入力を否定します。(A NAND A) NAND (B NAND B)は!(!A & !B)となり、!A & !Bは単一の行0,0でのみ1となるため、その否定は他の3つの行で1となります——これがA OR Bです。NOT、AND、ORはステップ5で関数を標準形として記述するために使用したまさにそのものであり、したがってこの1つの4行の列は、任意の変数個数のあらゆるブール関数を表現できます。
次に!A | !Bを取り上げます。これは!(A & B)と演算子を全く共有していません——括弧の否定も、どこにもANDもありません。その列を一から構築し、どこに行き着くかを確認しましょう。
2つのNOTの列があり、どちらも結果の隣に出力されます。!AはAが0である2つの行で1となり、!BはBが0である2つの行で1となります。それらは1つの行で一致し、1つの行でともに不成立となります。
ORは両方の入力が0である場合にのみ0となり、それはまさに1つの行、すなわちA=1、B=1の否定のどちらも残らない行で発生します。他のすべての行には、少なくとも1つの1が含まれています。
したがって、4行中3行が1となります——同じ0.75であり、同じパーセンテージとして表されます。
最小項も一致し、最初の問題と項ごとに同じ順序となります。
ここで、表を一切使わずに2つの式を比較してみましょう。A & Bはまさに1つの行で1となるため、!(A & B)はまさにその行で0となり、それは!A | !Bを不成立にしたのと同じ行です。同じ場所で0になり、他のすべての場所で1になる2つの列は、同じ1つの列です。
これにはどれほど感銘を受けるべきでしょうか?4行の真理値表には4つの結果セルがあり、それぞれが0または1となるため、2つの変数が取り得る個別の関数は全体で16個しかありません。それほど小さな集合の中で一致することは容易です——だからこそステップ5が重要な意味を持ちます。それは1つの行を固定し、残りを数えることがなかったからです。
解答
両方の式は、同じ3つの最小項により75.0%という結果になります。なぜなら、それらは2つの名前を持つ1つの関数だからです。 主標準形は指紋のようなものです。2つの式が等価であるのは、最小項の集合が一致するときに限られます。したがって、2つの回路が同じように動作するかどうかという問題は、2つのリストが一致するかどうかという問題に帰着されます。帰着されないのは、リストを構築するコストです。2変数には4行が必要であり、それは頭の中で計算できました。20変数には1,048,576行が必要となり、100変数にはおよそ1.27×10³⁰行が必要となります。表が手法として成り立たなくなっても、指紋の考え方は依然として正しいアプローチです。ステップ5の行ごとの議論こそが、この飛躍を乗り越えて生き残るものです。なぜなら、そこでは行数が何行あるかに一度も言及しなかったからです。