§A3.4条件と集合の対応

最終更新

命題は真偽が定まっていますが、数学で扱う文の多くは変数を含み、値を決めるまで真偽が定まりません。その扱い方を定めます。

1 真理集合

定義 1.1 (条件). 変数を含み、それぞれの変数が動く範囲の中で値を与えると真偽が定まる文や式を条件 (condition) という1。

たとえば、xxが実数の範囲を動くとき、「x>3x > 3」は条件です。x=5x = 5を代入すれば真、x=1x = 1を代入すれば偽になります。

定義 1.2 (真理集合). 変数xxが動く範囲を集合UUとし、UUの各要素について真偽が定まる条件をp(x)p(x)とする。UUの要素のうち、p(x)p(x)を真にするものをすべて集めた集合

P={ x∈U∣p(x) }P = \{\,x \in U \mid p(x)\,\}

を、条件p(x)p(x)の真理集合 (truth set) という2。x∈Ux \in Uに対して、「xxが条件ppを満たす」ことと「x∈Px \in P」とは同じ意味である。

同じ全体集合UU上の条件p(x)p(x)、q(x)q(x)の真理集合を、それぞれPP、QQとします。条件を論理演算で組み合わせたときの真理集合は、次のようになります。

条件 真理集合
p(x)p(x)かつq(x)q(x) P∩QP \cap Q(共通部分)
p(x)p(x)またはq(x)q(x) P∪QP \cup Q(和集合)
p(x)p(x)でない P‾=U∖P\overline{P} = U \setminus P(補集合)3

また、「p(x)p(x)ならばq(x)q(x)」がすべてのx∈Ux \in Uについて成り立つことは、PPのどの要素もQQの要素であること、すなわちP⊂QP \subset Qと同じです。

例 1.3. 全体集合をU={1,2,3,4,5,6}U=\{1,2,3,4,5,6\}とし、p(x)p(x)を「xxは偶数である」、q(x)q(x)を「xxは33の倍数である」とする。真理集合はそれぞれP={2,4,6}P=\{2,4,6\}、Q={3,6}Q=\{3,6\}である。条件文p(x)⇒q(x)p(x)\Rightarrow q(x)が偽になるのは、p(x)p(x)が真でq(x)q(x)が偽の場合だけである。したがって、偽になる値の集合はP∖Q={2,4}P\setminus Q=\{2,4\}であり、真になる値の集合は{1,3,5,6}\{1,3,5,6\}である。たとえばx=1x=1では、前件が偽なので条件文は真である。条件文が真になるのは、p(x)p(x)が偽であるか、q(x)q(x)が真である場合である。したがって、その真理集合はP‾∪Q\overline P\cup Qとも書くことができる。実際、P‾={1,3,5}\overline P=\{1,3,5\}なので、P‾∪Q={1,3,5,6}\overline P\cup Q=\{1,3,5,6\}となる。この真理集合はUUと一致しないため、「すべてのx∈Ux\in Uについてp(x)⇒q(x)p(x)\Rightarrow q(x)が成り立つ」という主張は偽である。x=2x=2とx=4x=4は、それぞれ反例になっている。

2 例:整数についての条件

例 2.1. 全体集合を整数全体とし、二つの条件を次のように置く。

  • p(x)p(x):xxは44の倍数である。真理集合をPPと書く。
  • q(x)q(x):xxは22の倍数である。真理集合をQQと書く。

44の倍数はすべて22の倍数なのでP⊂QP \subset Qが成り立つ。これは条件の言葉では「p(x)p(x)ならばq(x)q(x)」がすべての整数について成り立つことにあたる。逆向きの包含Q⊂PQ \subset Pは成り立たない。x=2x = 2はQQに属してPPに属さないからである。

図は、二つの条件がこの包含関係にある場合を1枚描いたものです。包含が成り立つ根拠は、xxが44の倍数であればx=4kx = 4kと書くことができ、x=2⋅(2k)x = 2\cdot(2k)より22の倍数である、という議論のほうにあります。

同じ全体集合のもとで、共通部分と和集合も読み替えることができます。P∩Q=PP \cap Q = Pであり、これは「44の倍数かつ22の倍数」が「44の倍数」と同じ条件であることに対応します。P∪Q=QP \cup Q = Qであり、これは「44の倍数または22の倍数」が「22の倍数」と同じ条件であることに対応します。

3 補集合は全体集合の取り方で変わる

条件の否定を補集合として読み替えるときは、全体集合が何であるかを先に決めておきます。同じ条件であっても、全体集合を変えると補集合が変わるからです。

例 3.1. 条件p(x)p(x):x2=1x^2 = 1を考える。

  • 全体集合を整数全体とすると、P={−1,1}P = \{-1, 1\}なので、P‾\overline{P}は−1-1と11を除く整数全体である。00、22、−3-3などがP‾\overline{P}に属する。
  • 全体集合を正の整数全体とすると、P={1}P = \{1\}なので、P‾\overline{P}は22以上の整数全体である。−1-1はそもそも全体集合に属さないため、P‾\overline{P}の要素にならない。
  • 全体集合を{1}\{1\}とすると、P={1}P = \{1\}なので、P‾=∅\overline{P} = \varnothingである。このとき「x2≠1x^2 \ne 1」を満たす要素は一つも無い。

三つの場合で、条件x2=1x^2 = 1そのものは変わっていません。変わったのは、xxが動く範囲としてどの集合を取るかだけです。「この条件を満たさないもの」と言うときは、何の中で満たさないのかを指定しなければ、集合が定まりません。

閑話休題:論理の、もう一つの対応先 本記事では、論理を集合へ対応させました。「かつ」は共通部分、「または」は和集合、「ならば」は包含です。では、対応先は集合だけでしょうか。実は、もう一つの対応先があります。型です。

プログラミングでは、値に「整数型」「文字列型」といった型というラベルを付けます(型は、その型が取りうる値の集合のようなものだと考えてください)。驚くべきことに、論理と型のあいだにも、集合のときと同じ対応表を引くことができます。本記事の表に、右の1列を加えます。

論理 集合(本記事) 型
かつP∧QP \land Q P∩QP \cap Q 直積型(ペア)P×QP \times Q
またはP∨QP \lor Q P∪QP \cup Q 直和型P+QP + Q
ならばP⇒QP \Rightarrow Q P⊂QP \subset Q 関数型P→QP \to Q

決定的なのは、命題を証明することができることが、その型のプログラムを書くことができることに対応するという点です。証明とプログラムが同じものの別の姿であるというこの対応を、カリー・ハワード対応と呼びます。

ここから先が興味深いところです。私たちが論理と聞いて思い浮かべるのは、一度正しいと分かった事実を何度でも使い回すことができる論理です。ところが、事実は高々一度しか使うことができない(捨てるのは自由であるが、複製はできない)という、一見すると何の役に立つのか分からない論理を考えることができます。アフィン論理です。カリー・ハワード対応によってこの論理を型の世界へ移すと、値を高々一度しか使うことができない型システム、すなわち Affine 型が現れます。

この「一度きり」という制約が、現実の場面で決定的に効きます。メモリの一区画に持ち主が一人しかいなければ、解放済みのメモリを二度使う(use-after-free)という古典的なバグが原理的に起こりません。プログラミング言語 Rust は、この考え方をもとに所有権システムを設計し4、メモリ安全性をガベージコレクタではなく型のレベルで保証します。型検査が通れば、その時点でメモリ安全が確保されているということです5。

型のレベルでメモリ安全性を保証することがどれほどのことかを考えてみます。サイバー攻撃に悪用される脆弱性のうち約7割はメモリ安全性のバグが原因であると報告されています。コンパイル時にそれを根絶することができれば、従来は取り切ることができなかった脆弱性の大半を原理的に排除することができます。使い回すことのできない事実の論理という、役に立つのかどうかも怪しい抽象理論が、世界のソフトウェアの安全性を支える土台になっています。本記事で扱った論理と集合の対応から、一続きにたどることのできる話です。

Footnotes

  1. 正確には、「xxは整数であり、さらにx>3x > 3である」のように、xxがそもそもどういう類の値であるのかを条件づける必要があります。たとえば、xxの取りうる値として{5}\{ 5 \}のような集合があり得てしまうと、条件「{5}>3\{ 5 \} > 3」は真か偽かという以前に無意味になります。一方、論理学では、条件に現れる変数がどういう類の値であるのかを必ずしも指定せず、単なる記号として導入します。その代わり、有意味な文字列がどのように組み立てられるのかを明示する必要があり、論理そのものも記号の操作として定義されることになります。詳細は§F39 モデル理論が扱います。 ↩

  2. 正確には、条件に含まれている変数がそもそもどういう集合の要素であるのかが明記されている必要があります。集合XXが変数xxの動く範囲であるならば、条件p(x)p(x)の真理集合は{x ∣ (x∈X)∧p(x)}⊂X\{ x \,|\, (x\in X) \land p(x)\}\subset Xという部分集合です。 ZFC(といくつかの追加公理)を基礎とする現代数学では、分出公理スキーマによって真理集合の存在が公理化されています。詳細は§F1 公理的集合論が扱います。 ↩

  3. このような補集合の説明は世間でよく見られるものですが、実際には、前の脚注のとおり、変数xxがどの集合の要素であるのかが指定されていなければ、真理集合は意味を持ちません。そして補集合という概念自体も、PPの外側が何であるのかが指定されなければ意味を持ちません。xxの動く範囲が指定されないという暗黙さは、PPの外側が何であるのかが不明瞭であるという暗黙さと対応しています。変数xxが集合XXの要素であることが明示されているのであれば、補集合はX∖PX\setminus Pのように、全体集合を明記して書くものです。なお、補集合をX−PX-Pのように引き算の記号を用いて書く人もいます。大学で数学を学んだ人の中には、全体集合を明記せずP‾\overline{P}と書くことに抵抗のある人も多いでしょう。 ↩

  4. 正確には、Rust の所有権は借用や Drop を持つため、純粋な Affine 型そのものではありません。あくまでもそれをもとにした型システムです。 ↩

  5. unsafe を使えば、この保証の外に出ることができます。安全が保証されるのは unsafe を用いない場合にかぎります。 ↩

例題

条件と何を求めるかを確認してから、式と答えの対応を見比べてください。

次の2つの条件 p, q について、真理集合 P, Q を求めよ。さらに p ∧\land q、p ∨\lor q、¬(p\neg(p∧\land q) の真理集合を求め、p ⇒\Rightarrow q と q ⇒\Rightarrow p の真偽を判定せよ(偽なら反例を1つ挙げよ)。x は実数とする。

実数 x についての次の2つの条件 p, q の真理集合 P, Q を求め、p ∧\land q、p ∨\lor q、¬(p\neg(p∧\land q) の真理集合と、p ⇒\Rightarrow q・q ⇒\Rightarrow p の真偽を答えよ(偽なら反例を1つ挙げよ)。

解法の型条件を解いて真理集合(区間)にする。∧\land は共通部分、∨\lor は和集合、¬\neg は補集合。含意 p ⇒\Rightarrow q が真であることは包含 P ⊆\subseteq Q と同じ

  1. 例題 1

    p:x2+5x<0q:x2<4\begin{array}{ll} p: & x^{2}+5x < 0 \\ q: & x^2 < 4 \end{array}
  2. 例題 2

    p:x2+3x−4<0q:x2−3x−4<0\begin{array}{ll} p: & x^{2}+3x-4 < 0 \\ q: & x^{2}-3x-4 < 0 \end{array}
  3. 例題 3

    p:x2+3x<0q:∣x+2∣<4\begin{array}{ll} p: & x^{2}+3x < 0 \\ q: & |x + 2| < 4 \end{array}
  4. 例題 4

    p:x2<1q:x2<16\begin{array}{ll} p: & x^2 < 1 \\ q: & x^2 < 16 \end{array}
  5. 例題 5

    p:x2+7x+6<0q:∣x+1∣<3\begin{array}{ll} p: & x^{2}+7x+6 < 0 \\ q: & |x + 1| < 3 \end{array}
  6. 例題 6

    p:x2−x−2<0q:x2−x−20<0\begin{array}{ll} p: & x^{2}-x-2 < 0 \\ q: & x^{2}-x-20 < 0 \end{array}
  7. 例題 7

    p:x2+3x−4<0q:∣x−1∣<3\begin{array}{ll} p: & x^{2}+3x-4 < 0 \\ q: & |x - 1| < 3 \end{array}
  8. 例題 8

    p:∣x+2∣<2q:x2−x−6<0\begin{array}{ll} p: & |x + 2| < 2 \\ q: & x^{2}-x-6 < 0 \end{array}
  9. 例題 9

    p:x2+7x+6<0q:∣x+1∣<2\begin{array}{ll} p: & x^{2}+7x+6 < 0 \\ q: & |x + 1| < 2 \end{array}
  10. 例題 10

    p:x2+5x<0q:x2+x−6<0\begin{array}{ll} p: & x^{2}+5x < 0 \\ q: & x^{2}+x-6 < 0 \end{array}

演習

問題を解いてから「解答・解説」を開けます。

次の2つの条件 p, q について、真理集合 P, Q を求めよ。さらに p ∧\land q、p ∨\lor q、¬(p\neg(p∧\land q) の真理集合を求め、p ⇒\Rightarrow q と q ⇒\Rightarrow p の真偽を判定せよ(偽なら反例を1つ挙げよ)。x は実数とする。

演習を読み込み中…

前提記事