SQLの背景となっている理論には2つあります。
集合論と述語論理です。
これは、皆様よくご存じかもしれません。
※実際、名著『達人に学ぶSQL徹底指南書』にもそのような記載があります。
実際、SQLをより深く理解するためには、その理論的な支柱である集合論や述語論理への理解が欠かせません。
そして述語論理を理解するには、その前提となる命題論理の基礎を押さえる必要があります。
この記事では、ITエンジニアや数学初学者の方に向けて、命題論理の基本概念をやさしく解説していきます。
1. 命題論理とは?まずは「命題」から始めよう
■ 命題とは何か?
命題論理を学ぶ第一歩は、命題(proposition)の概念を正確に理解することです。
命題とは、真(True)か偽(False)かがはっきり決まる文や式のこと
定義としてはシンプルですが、ここで重要なのは「客観的に真偽を判断できる」という点です。
たとえば:
- 「2 + 3 = 5」
これは数学的に正しいことが明らかなので、命題です。
一方で、以下のような文は命題ではありません。
- 「この料理は美味しい」
これは人によって感じ方が異なるため、主観的です。したがって命題ではありません。 - 「x > 5」
この文は一見、命題の様に見えますが、xの値が決まっていないため真偽を判定できません。このような文は命題ではなく、「述語(predicate)」と呼ばれます。
ただし、「x > 5」に具体的な値を代入すれば命題になります。たとえば:
- 「7 > 5」なら真の命題
- 「3 > 5」なら偽の命題
このように、変数が含まれる文は命題ではなく、値を与えることで初めて命題に変わるのです。
この「述語」という概念については、次回以降の記事で詳しく扱っていきます。
■ 命題を記号で表現する意味
命題論理では、具体的な命題を記号(P, Q, R など)で表現します。これは単なる省略ではなく、論理学における重要なアプローチです。
なぜこのような記号化が必要なのでしょうか?理由は以下の通りです:
- 論理構造の明確化:文章の内容ではなく、論理的な関係性に焦点を当てられる
- 複雑な論理式の簡潔な表現:長い文章も記号で短く表現できる
- 計算的処理:コンピュータでも扱いやすい形式になる
- 言語の壁を越える:どの言語でも同じ論理構造を表現できる
この記号化により、論理学は「内容」から「構造」へと抽象化され、より普遍的な法則を発見できるようになったのです。
■ 真理値という概念
命題には真理値(truth value)が割り当てられます。古典的な命題論理では、真理値は以下の2つだけです:
- 真(True、T、1):その命題が正しい場合
- 偽(False、F、0):その命題が正しくない場合
この二値性が命題論理の大きな特徴です。「部分的に正しい」や「たぶん正しい」といった曖昧さは認められません。すべての命題は、真か偽のどちらか一方の値を持ちます。
興味深いことに、データベースの世界ではNULLという第3の値が存在し、三値論理が使われています。これがSQLの条件文でしばしば混乱を招く原因でもあります。これはまた別の記事で扱うことにしましょう。
第2章:推論と演繹──正しい思考を支える論理の骨格
■ 推論とは何か?
「推論(inference)」とは、ある前提から結論を導き出す思考のプロセスです。
私たちは日常生活の中で自然と推論を行っています:
- 「雲行きが怪しい。だから、もうすぐ雨が降るかもしれない」
- 「冷蔵庫に何もない。だから、今日は買い物に行かなくてはならない」
このように、何らかの情報(前提)から、別の情報(結論)を導くのが推論です。
ただし、すべての推論が正確とは限りません。論理学では、推論の形式が妥当かどうかを厳密に評価します。
■ 演繹とは何か?
推論にはさまざまな種類がありますが、命題論理で中心的に扱うのが演繹(deduction)という形式です。
演繹とは、前提が真であるならば、結論も必ず真になるような推論の形式のことです。
たとえば、次のような推論が演繹です:
- 前提1:すべての人間はいつか必ず死ぬ。
- 前提2:ソクラテスは人間である。
→ 結論:ソクラテスはいつか必ず死ぬ。
このように、前提から必然的に結論が導かれるのが演繹の特徴です。
◾️補足:前提の「真偽」と推論の「妥当性」は別問題
ここで注意すべき大事な点があります。それは:
演繹の正しさ(論理的妥当性)は、前提が真かどうかに依存しない
たとえば、次のような演繹も形式としては正しい(妥当な)推論です:
- 前提1:すべての猫は空を飛ぶ。
- 前提2:ミケは猫である。
→ 結論:ミケは空を飛ぶ。
前提1が現実には偽であっても、推論の形式自体は正しく、論理的には妥当です。
このように、論理学では「前提が真であれば、結論も必ず真になる」という関係を重視します。
それが成立していれば、その推論は「妥当(valid)」だと言えます。
■ 命題論理における推論の使い方
命題論理では、命題どうしを組み合わせることで、新たな命題を導き出すことができます。
たとえば、次のような命題があるとします:
- 命題P → Q:「今日が休日ならば、私は公園に行く」
- 命題P:「今日は休日だ」
- 命題Q:「私は公園に行く」
さらに、P(今日は休日だ)が真であるとわかっていれば、
Q(私は公園に行く)も真であると結論づけることができます。
このような推論の形式は「モーダスポネンス(modus ponens)」と呼ばれ、命題論理で最も基本的な推論規則のひとつです。
3. 論理演算子で命題を組み合わせる
個々の命題だけでは表現できない複雑な状況を扱うため、命題論理では論理演算子(論理結合子)を使って命題同士を組み合わせます。これらの演算子は、私たちが日常的に使う「〜ではない」「かつ」「または」といった言葉に対応しています。
3.1 否定(NOT、¬)
否定は最もシンプルな論理演算子で、ある命題の真理値を反転させます。
- 記号:
¬P
(「ノット ピー」と読む) - 意味: 「Pではない」
- 例:
- P:「今日は雨が降っている」
¬P
:「今日は雨が降っていない」
- 真理値: Pが真のとき
¬P
は偽、Pが偽のとき¬P
は真。 - 重要な性質:二重否定の法則
¬(¬P) = P
- 「雨が降っていないことはない」は「雨が降っている」と同じ意味になります。
この当たり前のような話は、SQLにおいて非常に重要な性質です。
3.2 論理積(AND、∧)
論理積は「かつ」を意味し、結合される両方の命題が真のときにのみ真になります。一つでも偽があれば全体が偽です。
- 記号:
P ∧ Q
(「P かつ Q」または「P アンド Q」と読む) - 意味: 「Pであり、かつQである」
- 例:
- P:「今日は雨が降っている」
- Q:「私は傘を持っている」
P ∧ Q
:「今日は雨が降っていて、かつ私は傘を持っている」
- 真理値: Pが真、Qが真のときのみ、
P ∧ Q
は真。それ以外は偽。 - 特徴:
- 厳格性: 一つでも条件を満たさなければ全体が成立しない。
- 交換法則:
P ∧ Q = Q ∧ P
- 結合法則:
(P ∧ Q) ∧ R = P ∧ (Q ∧ R)
- 日常的な「と」「かつ」「両方とも」という表現に対応し、複数の条件をすべて満たす必要がある場面で使われます。
3.3 論理和(OR、∨)
論理和は「または」を意味し、結合される命題のうち少なくとも一つが真であれば真になります。
- 記号:
P ∨ Q
(「P または Q」または「P オア Q」と読む) - 意味: 「Pである、またはQである(あるいは両方)」
- 例:
- P:「今日は雨が降っている」
- Q:「私は傘を持っている」
P ∨ Q
:「今日は雨が降っている、または私は傘を持っている(あるいは両方)」
- 真理値: Pが偽、Qが偽のときのみ、
P ∨ Q
は偽。それ以外は真。 - 重要な注意点:包含的論理和
- 日常言語の「または」には、「どちらか一方だけ」という排他的論理和と、「少なくとも一方、両方でも可」という包含的論理和があります。
- 命題論理の
∨
は包含的論理和です。P ∨ Q
は、「Pだけが真」「Qだけが真」「両方とも真」のいずれの場合でも真になります。
- 特徴:
- 寛容性: 一つでも条件を満たせば全体が成立する。
- 交換法則:
P ∨ Q = Q ∨ P
- 結合法則:
(P ∨ Q) ∨ R = P ∨ (Q ∨ R)
まとめ:命題論理は論理の第一歩、あらゆる分野の基礎
命題論理は、一見すると抽象的で実用性に欠けるように感じるかもしれません。しかし、実際には以下のような広範囲な応用があり、皆さんの論理的思考力の向上に繋がります。
- SQLクエリの論理的構造の理解
- プログラムの条件分岐の設計
- デジタル回路の動作原理
- 複雑な条件の整理と分析
さて、今回解説した命題論理には、さらに奥深い「法則」や「応用」があります。
次回の記事では、「連言」「選言」「ド・モルガンの法則」をはじめとする重要な論理法則を掘り下げ、それがSQLでどのように活かせるのか、解説していきます。どうぞお楽しみに!