ド・モルガンの法則は、論理演算において非常に重要な法則です。ITシステムの設計や開発では、条件分岐・アクセス制御・検索条件(SQL)・監視ルールなど、複雑な条件式を日常的に扱います。ここでド・モルガンの法則を理解しておくと、「否定(NOT)」を含む式を安全に変形でき、読み間違いによるバグや運用トラブルを減らせます。
本記事では、ド・モルガンの法則の基本、よくある変形パターン、実務での使いどころ、そして「どこまで一般化できるか/何に注意すべきか」までを整理します。式の意味を保ったまま、分かりやすい形へ変形できるようになることがゴールです。
ド・モルガンの法則とは、命題論理における「否定(NOT)」と「論理積(AND)・論理和(OR)」の関係を示す法則です。ポイントは、否定が括弧をまたぐときに、AND/ORが入れ替わり、各項に否定が分配されることです。
ド・モルガンの法則は、次の2つで表されます。
ここで、PとQは命題(真/偽をもつ条件)を表します。¬は否定、∧はAND、∨はORです。
言い換えると、次のように覚えると実務で使いやすくなります。
実務では、否定が絡む条件式が読みづらくなりがちです。たとえば「この条件を満たさない場合」のように、仕様が“否定形”で与えられることは珍しくありません。
ド・モルガンの法則を使うと、否定を括弧の外から中へ移して、条件を平坦化できます。これにより、条件式が短くなることもありますが、それ以上に「人間が読みやすい形に整える」効果が大きく、バグの予防に直結します。
ド・モルガンの法則は、命題論理(真偽値と論理演算)における基本的な同値変形です。論理式を同値変形しても意味(真偽が成立する条件)は変わらないため、設計・レビュー・テストの場面で「仕様の意味を保ったまま表現を変える」ための共通言語になります。
ここでは、ド・モルガンの法則を「どんなときに」「どう使うと読みやすくなるか」を、式の形を中心に整理します。
例として、次の式を考えます。
¬(P ∧ (Q ∨ R))
括弧の外のNOTを内側へ入れていきます。まず外側のANDに対してド・モルガンを適用します。
¬P ∨ ¬(Q ∨ R)
次に、残った ¬(Q ∨ R) に対して、ORのド・モルガンを適用します。
(¬P) ∨ ((¬Q) ∧ (¬R))
このように、NOTが括弧をまたぐたびにAND/ORが入れ替わることを意識すると、手続き的に変形できます。
たとえば次の条件式は、否定が括弧をまたいでいて読みにくくなりがちです。
if (!(a && (b || c))) { ... }
ド・モルガンの法則で変形すると、次の形になります。
if (!a || (!b && !c)) { ... }
どちらが良いかは状況次第ですが、実務では「否定が外側に大きくかかっている」よりも「各条件に局所的に否定が付いている」ほうが、レビューで読み解きやすいことがあります。
なお、変形は可読性や仕様理解のために行うのが基本で、実行速度が必ず上がるとは限りません(コンパイラ最適化や短絡評価の影響もあるため)。まずは読み間違いを減らすことを優先するのが安全です。
論理回路では、NAND(NOT-AND)やNOR(NOT-OR)が部品として使いやすいことがあります。ド・モルガンの法則は、AND/ORとNOTの構造を入れ替えられるため、同じ機能をNANDだけ/NORだけで実現するといった設計の基礎にもなります。
たとえば、¬(P ∧ Q) は、そのままNANDです。逆に、(P ∨ Q) をNORとNOTの組み合わせで表現する、といった変形が可能になります。
「発展」といっても、まずは安全に使える範囲を押さえるのが重要です。ここでは、一般化と、実務上の注意点(特に“二値ではない世界”)を中心に整理します。
ド・モルガンの法則は2項だけでなく、複数項にも自然に拡張できます。
実務では、長いAND条件をまとめてNOTで囲った仕様(「全部満たさないなら…」)を、読みやすいOR条件へ分解する、といった形で登場します。
プログラミング言語の多くは二値(true/false)ですが、SQLのNULLや、一部の仕様(未知・未判定)を扱う世界では、論理が三値になることがあります。
この場合、ド・モルガン“そのもの”を機械的に当てはめると、意図とズレることがあります。特にSQLでは、NULLが混ざる条件で NOT を移動させると結果集合が変わることがあり得ます。
実務上は、次のような対策が現実的です。
ド・モルガンの法則は古典的な二値論理の基本法則です。ファジィ論理や量子計算、AIなどの分野で“類似の関係”が議論されることはありますが、そこでのAND/OR/NOTは古典論理と同じ定義ではない場合が多く、前提を揃えずに一般論として語ると誤解が生まれやすい領域です。
実務記事としては、「古典論理の範囲(true/false)で確実に使える」ことを主軸にし、発展話題は前提が違うため単純には同一視できない、という整理に留めるほうが安全です。
ド・モルガンの法則は、否定(NOT)が括弧をまたぐときにAND/ORが入れ替わり、各項に否定が分配されることを示す、論理演算の基本法則です。条件式を読みやすくしたり、仕様の否定形を分解して扱いやすくしたりする場面で、実務上の価値が大きい法則です。
一方で、SQLのNULLのように三値論理が絡む世界では、機械的な変形が意図とズレる可能性があります。変形は「同値」を保つための手段ですが、前提(真偽の定義)が変わると同値も揺らぐため、境界ケースの明示とテストが重要です。ド・モルガンの法則を“安全に使える道具”として身に付けることで、論理式の設計・レビュー・運用をより確実に進められるようになります。
NOTが括弧をまたぐとき、AND/ORが入れ替わり、各項にNOTが分配されるという同値変形の法則です。
(NOT A) OR (NOT B) に同値です。
(NOT A) AND (NOT B) に同値です。
否定を含む条件式を読みやすくしたいとき、アクセス制御や監視ルールの“否定形仕様”を分解したいとき、複雑な条件をレビューしやすくしたいときに役立ちます。
必ず上がるとは限りません。主目的は可読性と誤読防止です。性能は評価環境や最適化、短絡評価などに依存します。
使えます。NOT(全部AND)は「各NOTのOR」、NOT(全部OR)は「各NOTのAND」に一般化できます。
基本は同値ですが、NULLが絡むと結果が直感とズレることがあります。IS NULL/IS NOT NULLの明示やテストで意味を固定するのが安全です。
NOTが括弧をまたぐたびにAND/ORを入れ替え、括弧の中の各項にNOTを付ける、と手順化すると迷いにくくなります。
AND/ORとNOTの配置を同値のまま組み替えられるため、NANDやNOR中心の実装へ変換する基礎になります。
括弧の単位で変形すること、AND/ORの入れ替えを忘れないこと、三値論理(NULL等)が混ざる場合は結果比較テストを行うことが重要です。