NOTを括弧の中に分配すると、ANDとORが入れ替わる論理演算の変換ルール。
ド・モルガンの法則は、否定(NOT)を分配するときにANDとORが入れ替わるという法則です。19世紀の数学者オーガスタス・ド・モルガンが体系化しました。論理学・集合論・回路設計・プログラミングなど幅広い分野で使われます。
たとえば「りんごでもみかんでもない」は「りんごでない、かつみかんでない」と同じ意味です。「〜でもない」という否定を1つずつに分配すると「または」が「かつ」に変わる ―― これがド・モルガンの法則の直感的な理解です。
上のツールでは左右のベン図に同じ領域がハイライトされることで等価性を視覚的に確認でき、下の真理値表で全パターン一致も検証できます。まず「法則1」と「法則2」を切り替えてみましょう。
ド・モルガンの法則は2つの式がペアになっています。どちらを使うかは「外側の演算が AND か OR か」で決まります。
・法則1:¬(A ∧ B) = ¬A ∨ ¬B — 「A かつ B の否定」を分解するときに使う
・法則2:¬(A ∨ B) = ¬A ∧ ¬B — 「A または B の否定」を分解するときに使う
使い分けの判断基準(日本語からの判定):
・「~でも~でもない」(NOR的)→ 元の式は ¬(A ∨ B) なので法則2を適用 → ¬A ∧ ¬B
・「~かつ~ではない」「全部は満たさない」(NAND的)→ 元の式は ¬(A ∧ B) なので法則1を適用 → ¬A ∨ ¬B
具体例で比較してみましょう。
・「りんごでもみかんでもない」= ¬(りんご ∨ みかん) = ¬りんご ∧ ¬みかん(両方とも違う)→ 法則2
・「赤くて丸い、というわけではない」= ¬(赤い ∧ 丸い) = ¬赤い ∨ ¬丸い(少なくとも一方は違う)→ 法則1
覚え方のコツはどちらの式も「否定を中に入れるときに演算子をひっくり返す」点で共通していること。∧(AND)→∨(OR)、∨(OR)→∧(AND)に変わるだけなので、外側の演算子が AND なら法則1、OR なら法則2と機械的に判断できます。日本語で書かれた条件を論理式にしてから、どちらの法則で変換すべきかを見極めるとよいでしょう。
ド・モルガンの法則は「複雑な論理式を読みやすい形に書き換える」ときに大活躍します。論理式の等価変形やプログラムの if 文の簡略化など、応用範囲の広いテーマです。
活用パターン1:プログラムの if 文を読みやすくする
全体を NOT で囲んだ if(!(x > 0 && y < 10)) は読みにくいですが、ド・モルガンで NOT を分配して比較演算子を反転すれば if(x <= 0 || y >= 10) とスッキリ書けます。
活用パターン2:二重否定の除去と組み合わせる
¬(¬A ∨ ¬B) のような複雑な式は、次の2ステップで簡略化できます。
・ステップ1:ド・モルガン適用 → ¬(¬A) ∧ ¬(¬B)
・ステップ2:二重否定除去(¬¬A = A) → A ∧ B
外側の NOT から順に処理するのがコツです。
活用パターン3:論理回路の等価変換
NAND ゲート ¬(A ∧ B) は、ド・モルガンで ¬A ∨ ¬B(=「NOT を入力に被せた OR」)と等価。実際の CPU 設計では製造コスト面で NAND/NOR だけで回路を組むことが多く、ド・モルガンを使って AND/OR/NOT の回路を NAND/NOR に置き換えます。これが「NAND は万能ゲート」と呼ばれる理由の裏側です。
「¬(A ∧ B) と等価な式はどれか」「この論理回路と等価な回路は?」といった場面では、ド・モルガン → 二重否定除去 → 整理、の手順を踏めば、たいていの論理式簡略化に対応できます。
プログラミングではif(!(条件A && 条件B))のように「全体をNOTで囲む」コードをよく見かけます。ド・モルガンの法則を使えばNOTを外して読みやすく書き換えられます。
変換のルールは簡単です。
・!(A && B) → !A || !B(ANDをORに変え、各条件を否定)
・!(A || B) → !A && !B(ORをANDに変え、各条件を否定)
比較演算子の否定は > → <=, == → != のように反転します。
上のツールで「if文の簡略化」プリセットを選ぶと、¬(A∧¬B) = ¬A∨B の変換を確認できます。コードレビューでも「ここはド・モルガンで簡略化できますよ」と指摘できると頼もしいです。
ド・モルガンの法則と二重否定の除去(¬¬A = A)を組み合わせると、複雑な論理式を段階的に簡略化できます。
たとえば ¬(¬A∨¬B) は次のステップで簡略化します。
・ステップ1:ド・モルガン適用 → ¬(¬A) ∧ ¬(¬B)
・ステップ2:二重否定除去 → A ∧ B
コツは「外側のNOTから順に処理する」ことです。一度に全部を変換しようとするとミスしやすいので、1ステップずつ丁寧に変換しましょう。上のツールの「応用」プリセットで否定変数を含む変換も練習できます。
なぜ ¬(A∧B) = ¬A∨¬B になるのか、集合のイメージで考えると分かりやすいです。A∧B(AかつB)は「AとBが両方成り立つ領域(重なり)」です。その否定 ¬(A∧B) は「重なりでない全ての場合」、つまり「AかBの少なくとも一方が成り立たない場合」です。
「Aが成り立たない(¬A)」または「Bが成り立たない(¬B)」は、まさに¬A∨¬B(¬AまたはB)です。このように「両方の重なりを外すと、どちらかを外す(OR)になる」という関係で、ANDとORが入れ替わります。
日常語でもこの構造が見えます。「Aでもなく B でもない」(両方に属さない)は、「AでもなくかつBでもない」(¬A∧¬B)と同じです。「でも…ない」という表現は、もともと「または(OR)」で結ばれた範囲を否定したものなのです。
問題文の日本語をド・モルガンで変換するには、3つのステップを踏むと間違いが少なくなります。
ステップ1:日本語を論理式に変換する
「かつ」→ ∧(AND)、「または」→ ∨(OR)、「〜でない / 〜ではない」→ ¬(NOT)に対応させます。
例:「雨でも雪でもない」→ 「¬(雨 ∨ 雪)」
ステップ2:外側の演算子を確認する
括弧の中が AND(∧)なら法則1(¬(A∧B) = ¬A∨¬B)、OR(∨)なら法則2(¬(A∨B) = ¬A∧¬B)を使います。
例:「¬(雨 ∨ 雪)」は括弧の中が∨ なので法則2
ステップ3:法則を適用して演算子を入れ替える
各変数に¬を付け、∧↔∨を入れ替えます。
例:「¬(雨 ∨ 雪)」→「¬雨 ∧ ¬雪」=「雨でなく、かつ雪でない」
元の「雨でも雪でもない」と同じ意味になることを確認してみてください。
ド・モルガンの法則は論理回路の設計でも重要です。NANDゲート ¬(A∧B) はド・モルガンにより ¬A∨¬B と等価なので、「NOT + OR」の回路に置き換えることができます。
実際のCPU設計では、NANDゲートやNORゲートだけで回路を構成することが多く(製造コストが安いため)、ド・モルガンの法則を使ってAND/OR/NOTの回路をNAND/NORに変換します。これが「NANDは万能ゲート」と呼ばれる理由の裏側です。
「この論理回路と等価な回路はどれか」を考えるときは、ド・モルガンの法則で式を変換し、ゲートを置き換えるのが基本的な進め方です。