1. 0,0 -> 1 (空虚な真)
  2. 0,1 -> 1 (空虚な真)
  3. 1,0 -> 0 (反例)
  4. 1,1 -> 1 (前提と帰結が成立)
コース一覧
コンピューターサイエンス入門:理論編
含意 (→) を AND/OR/NOT で表現

コンピューターサイエンス入門:理論編

2 進数、論理演算、ビット演算、データ構造、計算量、メモリモデルなど、プログラミングの土台となるコンピュータサイエンスの理論知識を学べるコースです。プログラミングを始めたばかりの学習者や、CS の体系的な土台を作りたい現役エンジニアを対象としています。約 13 時間 (1 日 30 分 × 26 日) で 53 レッスンを修了でき、修了後はコードのパフォーマンスや設計判断の根拠を理解した上で実装できるようになります。

1
2進数とビット演算
01. 2進数から10進数への変換5分
02. 10進数から2進数への変換5分
03. ビットAND演算でフラグ判定5分
04. OR / XOR でフラグを操作する5分
05. popcount で 1 のビット数を数える5分
06. シフト演算で 2 倍 / 半分5分
07. 16 進数から 10 進数への変換5分
08. 第 1 章まとめクイズ5分
2
文字コードと真偽値ロジック
01. 文字 → ASCII コード5分
02. コード → 文字5分
03. UTF-8 のバイト長を返す5分
04. AND / OR の真理値表5分
05. NOT / XOR の真理値表5分
06. 含意 (→) を AND/OR/NOT で表現5分
07. ド・モルガンの法則5分
08. 第2章まとめクイズ5分
3
計算量とBig-O
01. forループの実行回数を返す5分
02. 入れ子ループの実行回数5分
03. 線形探索 (O(n))5分
04. 二分探索 (O(log n))5分
05. バブルソート5分
06. 配列の最大と最小5分
07. 累積和で範囲合計5分
08. 第3章まとめクイズ5分
4
データ構造 (基本)
01. スタック (push/pop) を実装する5分
02. キュー (enqueue / dequeue) を実装する5分
03. カッコのバランス判定 (スタック応用)5分
04. set で重複を除去する5分
05. map で出現回数を数える5分
06. 二数の和 (map で O(n))5分
07. アナグラム判定5分
08. 第 4 章クイズ — データ構造 (基本)5分
5
ファイル / メモリ / IO 概念
01. バイト → KB 変換5分
02. ディスクサイズフォーマット5分
03. キャッシュヒット率5分
04. LRU 簡易シミュレーション5分
05. エンディアンの入れ替え (uint32)5分
06. バッファ範囲チェック5分
07. 第5章まとめクイズ5分
6
ネットワークと符号化
01. Base64 エンコード後の長さ計算5分
02. URL エンコード対象文字数5分
03. IPv4 アドレスを 32bit 整数に変換5分
04. 32bit 整数を IPv4 アドレスに変換5分
05. CIDR プレフィックスからネットマスクを作る5分
06. 単純チェックサム5分
07. 第6章まとめクイズ5分
7
設計と DB 基礎
01. 重複データを 1NF に変換 (フラットなリスト化)5分
02. キーで join (map 利用)5分
03. 残高転送のトランザクション風処理5分
04. CAP の availability 模擬5分
05. URL ルーティング5分
06. 疎結合と密結合 — 依存性注入で設計を変える12分
07. コース総まとめクイズ5分

含意 (→) を AND/OR/NOT で表現

真理値表で式を見比べる

「雨なら傘を持つ」と言った人は、いつ嘘つきになるのか

朝に「雨なら傘を持っていく」と約束したとします。夜になって、この人は約束を守ったのか、破ったのか。判定してみてください。

雨が降って傘を持っていた日は、守っています。雨が降ったのに傘を持たなかった日は、破っています。では、晴れた日はどうでしょうか。傘を持っていても、持っていなくても、この約束について責める理由はありません。もともと雨の日の話しかしていないからです。

これが論理学の含意で、a ならば b、記号では a → b と書きます。

偽になるのは、1 通りだけ

起こりうる 4 通りを並べます。

  • 晴れ・傘なし ... 約束の対象外なので、破っていない
  • 晴れ・傘あり ... 約束の対象外なので、破っていない
  • 雨・傘なし ... 約束を破った
  • 雨・傘あり ... 約束を守った

偽になるのは 3 番目だけで、残りの 3 通りはすべて真です。含意は「破られたときだけ偽」と決められていて、それ以外はまとめて真にする、という取り決めになっています。

Python

days = [ (False, False), # 晴れ・傘なし (False, True), # 晴れ・傘あり (True, False), # 雨・傘なし (True, True), # 雨・傘あり ]

前提が成り立たない日は、破りようがない

引っかかるのは、上の 1 番目と 2 番目です。晴れているのに真、しかも傘のあるなしに関係なく真。直感には反しますが、約束が破られていないのは確かです。破る機会が来なかったのだから、嘘つきにはできません。

この「前提が偽なら全部真」を空虚な真と呼びます。「1 件も該当が無いリストは、条件を全部満たしている」と言われて納得しにくいのと、同じ形です。仕様を書くときには便利な性質で、例外を並べずに済みます。

含意は、入力チェックの形でよく出てきます。「メール通知を選んだなら、アドレスの入力が要る」がそれです。メール通知を選んでいない人にアドレスを求めてはいけないので、前提が偽の行は通さなければなりません。空虚な真を「よく分からない決まり」ではなく「前提が外れた人は素通しする」と読めるようになると、この手の条件を素直に書けるようになります。

ひっくり返すと、別の約束になる

b ならば a、つまり「傘を持っていたなら雨だった」は、元の約束とは別物です。雨でなくても傘を持つ日はあるので、元が真でもこちらは偽になりえます。これを逆と呼びます。

一方で「傘を持たなかったなら雨ではなかった」は、元と必ず同じ結果になります。こちらは対偶です。証明で対偶に置き換えると楽になることがあるのは、入れ替えても意味が変わらないからです。逆と対偶は名前も形も似ているので、混ぜないでください。

要件

  1. (NOT a) OR b と等価な処理を実装する
  2. a が 0 のときは b に関わらず 1 を返す
  3. a が 1 かつ b が 0 のときだけ 0 を返す

入出力例

implication(0, 0) → 1 implication(0, 1) → 1 implication(1, 0) → 0 implication(1, 1) → 1

ヒント

a → b は (NOT a) OR b と等価

a が 0 (False) のとき結果は常に 1 (空虚な真)

a == 1 && b == 0 のときだけ 0

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • ド・モルガンの法則

    ド・モルガンの法則を使って NOT (a AND b) を NOT a OR NOT b に変換する関数を実装し、等価性を実感します。

  • 第2章まとめクイズ

    第2章「文字コードと真偽値ロジック」の理解度を測る 4 択クイズ。ASCII / UTF-8 / 論理演算 / ド・モルガンのポイントを総ざらいします。

  • forループの実行回数を返す

    for ループを n 回まわすときに、本当に n 回実行されているのかを自分の手で数え、計算量の感覚を掴む。

  • スタック (push/pop) を実装する

    後入れ先出し (LIFO) の代表選手であるスタックを、push と pop の操作シーケンスで動かす。

main.py
学習モード
エディタを読み込んでいます

メモ

含意 (→) を AND/OR/NOT で表現

⌘S で保存