集合と必要十分条件

回 1-3 分野 1 数と式

必要十分条件は、「p ならば q」と「q ならば p」の両方が正しく、p と q が同じ意味になることです。「p ならば q」だけが正しいとき、p は q であるための十分条件、q は p であるための必要条件です。両方が正しい必要十分条件 (同値) の 2 つは、if の条件として入れ替えても動きが変わりません。x = 1 は x² = 1 の十分条件ですが、x = −1 という反例があるので必要条件ではありません。集合で言えば、条件を満たす物の集まりが小さい方が十分条件、大きい方が必要条件です。

必要条件、十分条件、ド・モルガンの法則を、条件式の真理値表と反例を Python で全部試して確かめます。

その if の書き換え、本当に同じ意味ですか

if not (age >= 18 and paid): を読みやすくしようとして、if age < 18 and not paid: と書き換えたとします。どちらも「18 歳以上で払い済み、ではない人」を止めるつもりです。

この 2 つは同じ意味ではありません。18 歳以上で払っていない人は、上の式では止まり、下の式では通ります。正しい書き換えは if age < 18 or not paid: です。

2 つの条件が、どの場合でも同じ結果になるとき、2 つは必要十分条件 (同値) です。片方の向きだけ言えるときが、必要条件と十分条件です。この回では、集合と「かつ、または、でない」をそろえてから、必要と十分の見分け方を、Python で全部の場合を試して確かめます。

集合と、かつ、または、でない

条件を満たす物を集めた物を、集合として見ます。1 から 10 の整数で、P を偶数の集まり、Q を 3 の倍数の集まりとします。

言葉記号意味P と Q の例Python
共通部分 (かつ)P ∩ Q両方に入る物6P & Q
和集合 (または)P ∪ Qどちらかに入る物2, 3, 4, 6, 8, 9, 10P.union(Q)
補集合 (でない)P̄全体のうち P に無い物1, 3, 5, 7, 9U - P
部分集合P ⊆ QP の物がどれも Q に入る4 の倍数の集まり ⊆ PA <= P
空集合∅1 つも入っていない集まり7 の倍数で 10 以下の偶数は無いset()

数学の「または」は、両方に入る物も含みます。6 は偶数でも 3 の倍数でもあり、P ∪ Q に入ります。Python の or も同じです。

ド・モルガンの法則

「でない」を「かつ」や「または」の外から中へ入れると、「かつ」と「または」が入れ替わります。

  • (A かつ B) でない = (A でない) または (B でない)
  • (A または B) でない = (A でない) かつ (B でない)

Python で書くと not (a and b) は not a or not b、not (a or b) は not a and not b と同じです。冒頭の if の書き換えは、ここで and を or に替え忘れた形です。

必要条件と十分条件

「p ならば q」が正しいことを p ⇒ q と書きます。このとき次のように呼びます。

  • p は q であるための十分条件 (p が言えれば、q を言うのに十分)
  • q は p であるための必要条件 (p であるには、q が必ず要る)

覚え方は「矢印の先が必要、矢印の元が十分」です。p ⇒ q と q ⇒ p の両方が正しければ、p と q は互いに必要十分条件で、同値と言い、p ⇔ q と書きます。

集合で見ると、大きい方が必要

p を満たす物の集まりを P、q を満たす物の集まりを Q とします。p ⇒ q が正しいことは、P ⊆ Q (P が Q にすっぽり入る) と同じです。ですから、集まりが小さい方が十分条件、大きい方が必要条件です。P と Q が同じ集まりなら、必要十分条件です。

整数 n で、「n は 4 の倍数」は「n は偶数」の十分条件です。4 の倍数はどれも偶数だからです。逆に「n は偶数」は「n は 4 の倍数」の必要条件です。6 は偶数ですが 4 の倍数ではないので、十分条件ではありません。

見分ける手順

  1. p ⇒ q が正しいかを見る。正しくなければ、p を満たすのに q を満たさない例 (反例) を 1 つ挙げる
  2. q ⇒ p が正しいかを同じように見る
  3. 2 つの結果を、次の表に当てはめる
p ⇒ qq ⇒ pp は q であるための
正しい正しい必要十分条件
正しい正しくない十分条件であるが、必要条件でない
正しくない正しい必要条件であるが、十分条件でない
正しくない正しくない必要条件でも十分条件でもない

正しくないことは、反例が 1 つあれば言えます。正しいことは、全部の場合で確かめるか、理由で示します。

例題

実数 x で、p を「x = 1」、q を「x² = 1」とします。x = 1 なら x² = 1 なので p ⇒ q は正しいです。x² = 1 でも x = −1 がありえるので、q ⇒ p は正しくありません。p は q の十分条件で、必要条件ではありません。

実数 a、b、c で、p を「a = b」、q を「ac = bc」とします。a = b なら両辺に c を掛けて ac = bc です。c = 0 なら、a = 1、b = 2 でも ac = bc = 0 なので、q ⇒ p は正しくありません。両辺を c で割れるのは c が 0 でないときだけ、という所が反例の出どころです。

対偶は同じ真偽

p ⇒ q に対して、「q でない ⇒ p でない」を対偶と言います。対偶は、元の式と必ず同じ真偽です。「4 の倍数なら偶数」が正しいので、「奇数なら 4 の倍数でない」も正しいです。元の式が示しにくいとき、対偶の方を確かめることがあります。

日常の言葉で

「東京都に住んでいる」は「日本に住んでいる」の十分条件で、「日本に住んでいる」は「東京都に住んでいる」の必要条件です。「パスワードが 8 字以上」は、多くのサービスで登録できるための必要条件ですが、それだけで登録できるとは限らないので十分条件ではありません。

動かして確かめる

1 本目は、ド・モルガンの法則と、冒頭の if の書き換えを、真と偽の 4 通り全部で試します。

動かす 真理値表で 4 通り全部を試す

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

a b 元 ドモ 誤り
1 1 0 0 0
1 0 1 1 0
0 1 1 1 0
0 0 1 1 1

元の式とド・モルガンで書き換えた式は、4 行とも同じです。and のまま「でない」を中へ入れた誤りの式は、a と b のどちらか一方だけが真の 2 行で違います。冒頭の「18 歳以上で払っていない人」は、a が真で b が偽の行です。

2 本目は、2 つの条件の関係を、範囲の中の全部の値で調べ、反例も出す関数です。

動かす 必要と十分を全部の値で調べる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

x=1 と x*x=1
   十分 反例 -1
4の倍数 と 偶数
   十分 反例 -18
x>3 と x>2
   十分 反例 3
not x>0 と x<=0
   必要十分 反例 None
偶数 と 3の倍数
   どちらでもない 反例 -20

出力の 2 行目は「p は q であるための何条件か」と反例の 1 つです。反例が None なのは、反例が無かったことを表します。x = 1 は x² = 1 の十分条件で、反例は x = −1 です。4 の倍数は偶数の十分条件で、−18 は偶数なのに 4 の倍数でない反例です。「x > 3」と「x > 2」は、小さい集まりの x > 3 が十分条件で、反例は 3 です。「偶数」と「3 の倍数」はどちらでもなく、−20 は偶数で 3 の倍数でない反例です。

3 本目は、集合の演算で同じことを確かめます。<= は部分集合かどうかを返します。

動かす 集合で包含とド・モルガンを確かめる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

P&Q [6]
P|Q [2, 3, 4, 6, 8, 9, 10]
Pでない [1, 3, 5, 7, 9]
F<=P True
P<=F False
ドモ [1, 5, 7] True

4 の倍数の集まり F は偶数の集まり P に入る (True) ので、「4 の倍数」は「偶数」の十分条件です。逆は False で、必要条件ではありません。「P または Q、でない」と「P でない、かつ Q でない」は、どちらも 1、5、7 で一致しました。

「全部の場合」から漏れる所

全部の場合を試すと言っても、試した範囲の外は分かりません。漏れやすい所が 3 つあります。

範囲が狭すぎる

「x² > x」と「x > 1」を 0 から 10 の整数だけで比べると、同値に見えます。負の数を入れると、x = −1 で x² = 1 > −1 なので、「x² > x」は「x > 1」の必要条件 (x > 1 なら x² > x) にすぎないと分かります。試す範囲には、0、1、負の数、境目の両側を入れます。

小数の NaN

Python の小数には、数でないことを表す NaN (float("nan")) があります。NaN との大小比べは、どれも False です。ですから整数では同値だった「not x > 0」と「x <= 0」が、NaN では食い違います。

動かす NaN では書き換えが同値でなくなる

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

-1.0 True True True
0.0 True True True
2.0 False False True
nan True False False

NaN のときだけ、not x > 0 は True、x <= 0 は False で、結果が違います。数の比べを not で裏返す書き換えは、NaN が来る場所では同値ではありません。

SQL の NULL

SQL では、NULL との比べは真でも偽でもない「不明」になり、WHERE は真の行だけを返します。ですから WHERE a = 1 と WHERE NOT (a = 1) を合わせても、全部の行にはなりません。頁の中の Python では、不明を None で表す関数を書いて数えます。

動かす NULL の行はどちらの WHERE にも出ない

python実行可能
出力

▶ 実行ボタンを押すと結果がここに表示されます

実行すると、次の通りに出ます

全部 3
where a = 1 1
where not (a = 1) 1
where a is null 1

全部で 3 行なのに、a = 1 が 1 行、NOT (a = 1) が 1 行で、NULL の行はどちらにも入りません。NULL の行も数えたいときは、a IS NULL を足します。

仕事でどう使うか

必要条件、十分条件、同値が出てくる場面は、次の通りです。

  • if の条件の書き換え。ド・モルガンで not を中に入れたら、真理値表か全部の値で同じかを確かめる
  • SQL の WHERE。NOT や OR を書き換えるときは、NULL の行がどちらに入るかを見る
  • テストの境目。「x > 0」と「x >= 1」は整数なら同値だが、小数なら 0.5 で食い違う。境目の両側と 0 をテストに入れる
  • 前提の確かめ。二分探索が正しく動くには、データが並んでいることが必要条件。並んでいるかを確かめずに使うと、見つかる物も見つからない
  • 仕様の言い換え。「全部の項目が入っていれば送れる」は、入っていることが送るための十分条件なのか、必要条件なのかで、作る確かめが変わる

よくある問い

必要条件と十分条件の覚え方はありますか

「p ⇒ q の矢印の先が必要、元が十分」と覚えます。集合で言えば、小さい方 (中に入る方) が十分、大きい方 (外側) が必要です。迷ったら、片方を満たすのにもう片方を満たさない例を探してみると、どちらの向きが正しくないかが分かります。

必要十分条件と同値は違いますか

同じことを指します。「p は q であるための必要十分条件」と「p と q は同値」は、どちらも p ⇒ q と q ⇒ p の両方が正しいことを言っています。プログラムで言えば、if の条件として入れ替えても、どの入力でも動きが変わらない 2 つの式です。

必要条件でも十分条件でもないのは、どんなときですか

どちらの向きにも反例があるときです。「偶数である」と「3 の倍数である」は、2 は偶数で 3 の倍数でなく、3 は 3 の倍数で偶数でないので、どちらの向きも正しくありません。集合で言えば、2 つの集まりがどちらも相手に入っていない形です。

対偶と逆は何が違いますか

p ⇒ q の逆は q ⇒ p、裏は「p でない ⇒ q でない」、対偶は「q でない ⇒ p でない」です。対偶は元と必ず同じ真偽ですが、逆と裏はそうとは限りません (逆と裏は互いに対偶なので、2 つの真偽は同じです)。「4 の倍数なら偶数」は正しく、その対偶「奇数なら 4 の倍数でない」も正しいですが、逆「偶数なら 4 の倍数」は 6 が反例で正しくありません。

確認クイズ

答えだと思う選択肢を押すと、その場で正誤と理由が開きます。3 問すべてに正しく答えると、この回は修了で、石が緑に変わります (この端末のブラウザに残ります)。間違えた問いは、あとから解き直せます。

1 問目

実数 x について、「x² = 1」は「x = 1」であるための何ですか。

2 問目

a と b は True か False です。not (a or b) と、どの値でも同じ結果になる式はどれですか。

3 問目

x が整数のとき not (x > 0) と同じ意味の条件はどれですか。

説明課題

「x > 3 は x > 2 であるための十分条件で、必要条件ではない」理由を、集合と反例を使って 3 文で説明してください。書いたら、下の模範解答を開いて比べてください。

模範解答

自分の説明を書いてから開いて、比べてください。

この回の先の一歩

if の条件を短く書き換えるときに、同じ意味かを全部の場合で確かめる癖が付くと、境目の不具合が減ります。いまの自分が転職までの道のどの段にいるかは、転職診断で確かめられます。

もっと深く

この回の続きを、ゆめさくのコースの章や道具で深められます。頁の中の確認クイズに答えたあと、手を動かす量を増やしたいときに使ってください。

一次資料

どれも 2026年10月30日に開いて、題と中身を確かめました。

次へ

分野 1 数と式の回

  1. 1-1数の表し方2 進数と 16 進数、桁の重み頁で読む
  2. 1-2シグマと漸化式Σ の読み方、和の公式、漸化式とループ頁で読む
  3. 1-3集合と必要十分かつ、または、でない、ド・モルガンこの回

分野 1 の頁へ戻るほかの分野を見る