![ソフトウェアエンジニアのための論理スキル[再]入門](https://sqripts.com/wp-content/uploads/2024/03/mochizuki_thumb_02-1024x512.jpg)
テストエンジニアが身につけておきたいスキルの一つに「論理スキル」があります。
この連載では、「プログラムのレベル」「文や文章のレベル」に分けて、論理スキルの基本である「論理の言葉」を徹底解説します。
筆者のnoteサイトで、「論理スキル[再]入門」を書こうと思った理由・経緯を綴っています。 ■論理スキル・“入門編”のこと (T3:Pt1:Ch01) よろしかったらご覧ください。
今回第4回は、第3回で見た論理演算の組合せについて解説します。
<テストエンジニアのための論理スキル[再]入門 連載一覧>※クリックで開きます
[第1回] なぜ、テストエンジニアに(も)論理のスキルは重要なのか【連載初回、全文公開中】
[第2回] プログラムレベルのロジック (1)概要編
[第3回] プログラムレベルのロジック (2)解説編・基本の論理演算
[第4回] プログラムレベルのロジック (3)解説編・論理演算の組合せ
[第5回] 文レベルのロジック (1)文レベルのAND/OR/NOT
論理演算の組合せ①
第3回で出てきた3条件の論理積や論理和や、「登録できるアカウント名文字列の条件」(3条件の論理積として扱いました)は、実は「二項演算である論理積/論理和の組合せ」です。(図4-1参照)

もっと“複雑”な組合せができることもあります。たとえば次のような、ふたつの数値がそれぞれ所定の範囲にあるという条件は……
入力Aの数値がminA以上で、かつ、入力Aの数値がmaxA以下である か、 または、 入力Bの数値がminB超で、かつ、入力Bの数値がmaxB未満である
次の三つの論理演算の組合せでできていますから……
- ①入力Aに関する二つの条件のAND式
- ②入力Bに関する二つの条件のAND式
- ①②に関するOR式
論理演算の式として下記のように表せます:
(A >= minA AND A <= maxA) OR (B > minB AND B < maxB)
論理演算を組み合わせる時は、何と何がAND/ORの関係にあるかに気をつけましょう。
個々の論理演算式を丸括弧”()”で括ると、書き間違い・読み間違いを抑えられます。
(「登録できるアカウント名」を、使用可能な文字(3条件のOR)をまとめずに論理演算の式で表してみてください)
論理演算の組合せ②AND/ORとNOTの組合せ (ド・モルガンの法則)
論理積(AND)の否定、論理和(OR)の否定
組合せの中で、AND式やOR式をNOTで括った「AND式の否定」「OR式の否定」はよく出てきます。テストを考える時にも頻繁に出くわす形です。
- (S1)「買い上げ商品点数が5点以上で、かつ、買い上げ合計金額が2,000円超の場合、特典Saが付与される」
- (S2)「買い上げ商品点数が20点以上か、または、買い上げ合計金額が10,000円超の場合、特典Sbが付与される」
という仕様があった場合、テストとしてはS1, S2それぞれについて次の両方を考えます。
- (Ev) 条件を満たす場合
- (Ei) 条件を満たさない場合(Evの否定)
S1のEiはAND式の否定・NOT(A AND B)、S2のEiはOR式の否定・NOT(A OR B)です(図4-2, 4-3, 4-4)。



「条件を満たさない」場合のAとBの真偽はどう考えればよいでしょうか。
- AND式の否定 ……「A, Bがともに真」ではない時に真になります。「ともに真、ではない」とは?
- OR式の否定 ……「A, Bどちらが真」ではない時に真になります。「どちらかが真、ではない」とは?
ド・モルガンの法則
AND式/OR式とその否定(NOT)との関係を理解しやすくしてくれるのがド・モルガンの法則です。
- A AND B(Aであり、かつ、Bである)の否定 ⇔
Aの否定か、または、Bの否定(Aでないか、または、Bでない)- NOT(A AND B) ⇔ NOT(A) OR NOT(B)
- A OR B(Aであるか、または、Bである)の否定 ⇔
Aの否定、かつ、Bの否定(Aでなく、かつ、Bでない)- NOT(A OR B) ⇔ NOT(A) AND NOT(B)
- この関係は常に成り立つ。(図4-5, 4-6)


具体例
S1(AND式)の否定
「買い上げ点数が5点以上」を条件A, 「買い上げ合計額が2,000円超」を条件Bとすると、
- 特典Sa付与の条件 …… = A AND B
- 条件を満たさない場合 …… = NOT(A AND B)
- ド・モルガンの法則を適用して ⇒ NOT(A) OR NOT(B)
- ⇒条件Aが成り立たないか、または、条件Bが成り立たない場合
- =「買い上げ点数が5点以上ではない」か、または、「買い上げ合計額が2,000円超ではない」
- (「買い上げ点数が5点未満か、または、買い上げ合計額が2,000円以下の場合」)
S2(OR式)の否定
「買い上げ点数が20点以上」を条件C, 「買い上げ合計額が10,000円超」を条件Dとすると、
- 特典Sb付与の条件 …… = C OR D
- 条件を満たさない場合 …… = NOT(C OR D)
- ド・モルガンの法則を適用して ⇒ NOT(C) AND NOT(D)
- ⇒条件Cが成り立たず、かつ、条件Dが成り立たない場合
- =「買い上げ点数が20点以上ではない」、かつ、「買い上げ合計額が10,000円超ではない」
- (「買い上げ点数が20点未満で、かつ、買い上げ合計額が10,000円以下の場合」)
込み入った条件への適用
ド・モルガンの法則は、今回冒頭に挙げた「2変数の数値の範囲の組合せ」のような、込み入った論理演算の組合せにも当てはまります。
考えやすくするために、A, Bの範囲を表す詳細な条件式を“まとめて”表します。
- 𝔸=入力Aの値が範囲内にある
- 𝔹=入力Bの値が範囲内にある
- 全体はOR式 …… = 𝔸 OR 𝔹
- 「そうでない」場合は …… = NOT(𝔸 OR 𝔹)
- ド・モルガンの法則を適用して ⇒ NOT(𝔸) AND NOT(𝔹)
- =(入力Aの値が範囲内ではなく、かつ、入力Bの値が範囲内ではない)
- NOT(𝔸)について
- 展開すると …… = NOT(A >= minA AND A <= maxA)
- ド・モルガンの法則を適用して ⇒ NOT(A >= minA) OR NOT(A <= maxA)
- 否定を取り除いて(不等号を逆転) ⇒ A < minA OR A > maxA
- NOT(𝔹)について
- 展開すると …… = NOT(B > minB AND B < maxB)
- ド・モルガンの法則を適用して ⇒ NOT(B > minB) OR NOT (B < maxB)
- 否定を取り除いて(不等号を逆転) ⇒ B <= minB OR B >= maxB
- ⇒(A < minA OR A > maxA) AND (B <= minB OR B >= maxB)
- = 「『入力AがminA未満であるか、または、maxA超』であり、かつ、
『入力BがminB以下であるか、または、maxB以上』」
むすび
ド・モルガンの法則を標語風に掲げておきます。実際に「その形」に出会った時にこの法則が頭に浮かぶよう、憶えてしまいましょう。
(いつか、「なぜそう考えてよいのか」の解明にチャレンジしてみてください)
- ANDの否定は、否定のOR / ORの否定は、否定のAND
- (否定のORは、ANDの否定 / 否定のANDは、ORの否定)
論理演算もド・モルガンの法則も、「直感的にそうだと感じていたこと」と同じだ、と感じる人も多いのではないでしょうか。それはその通りで、論理の言葉といっても普段使っている言葉の意味や働きとまったく異なるものではありません。そう考えると論理の言葉のハードルは下がるのではないでしょうか。
第5回・第6回は、文レベルのロジック(文や文章を理解する時に働く論理の言葉)に話題を移します。第5回は、前回と今回出てきた論理演算の言葉が文レベルではどのような意味/働きを持つのかを見ます(今回でも、そこはかとなく「文レベルの論理積・論理和・否定」が現れていますね)。
参考文献
- 『入門!論理学』(野矢茂樹 / 中央公論新社)
- 『スマリヤン先生のブール代数入門』(スマリヤン / 共立出版)
- 『記号論理学 一般化と記号化』(スマリヤン / 丸善出版)
- 『論理的思考の技法〈1〉第2版 「ならば」をめぐって』(鈴木美佐子 / 法学書院)
- 『新版 論理トレーニング』(野矢茂樹 / 産業図書)
連載一覧
[第1回] なぜ、テストエンジニアに(も)論理のスキルは重要なのか【連載初回、全文公開中】
[第2回] プログラムレベルのロジック (1)概要編
[第3回] プログラムレベルのロジック (2)解説編・基本の論理演算
[第4回] プログラムレベルのロジック (3)解説編・論理演算の組合せ
[第5回] 文レベルのロジック (1)文レベルのAND/OR/NOT

