MathLabs

数学の基礎

写像と濃度

写像 f:A→Bf:A\to B が単射であるとは、異なる2つの元を同じ場所に送ることが決してないことをいい、全射であるとは BB のすべての元に到達することをいい、両方成り立つとき全単射であるという。全単射によって無限集合の大きさを比較できる:∣N∣=∣Z∣=∣Q∣=ℵ0|\mathbb{N}| = |\mathbb{Z}| = |\mathbb{Q}| = \aleph_0、これら3つはすべて N\mathbb{N} との明示的な全単射を持つからである。カントールの定理 ∣A∣<∣P(A)∣|A| < |\mathcal{P}(A)| は、D={x∈A:x∉f(x)}D = \{x \in A : x \notin f(x)\} を用いた対角線論法によって証明され、べき集合が常に真に大きいことを示し、無限の階層が無限に続くことを示す;カントール・ベルンシュタイン・シュレーダーの定理は ∣A∣≤∣B∣|A|\le|B| và ∣B∣≤∣A∣  ⟹  ∣A∣=∣B∣|B|\le|A| \implies |A|=|B| を示し、1つの難しい全単射の代わりに2つの易しい一方向の単射で濃度を比較できるようにする。これらの考え方は、ハッシュ衝突、データ圧縮の限界、そしてある種の問題の計算不可能性の根底にある。

直観2つの山を対応させ、どちらが大きいか

写像 f:A→Bf : A \to B は AA の各元にちょうど1つの BB の元を対応させる。AA から BB への矢印として思い描くとよい:単射とは BB の同じ点に2本の矢印が着地しないこと、全射とは BB のすべての点に何らかの矢印が届くこと、全単射とはその両方——完璧な一対一対応である。AA と BB が無限であるとき、全単射の存在こそが両者が同じ大きさ、同じ濃度を持つということであり、1つずつ数えることが不可能でも成り立つ。

3次関数 y=x^3 が実数上の全単射であることを示すインタラクティブなグラフ
狭義単調増加な3次関数 y=x3y = x^3 は全単射 R→R\mathbb{R}\to\mathbb{R} である:すべての水平線がグラフとちょうど1回交わる。

大学単射・全射・全単射:形式的定義

定義: 単射・全射・全単射

写像 f:A→Bf : A \to B が単射であるとは、AA の異なる元が常に BB の異なる元に写ることをいう。全射であるとは、BB のすべての元が AA のある元の像であることをいう。両方成り立つとき全単射であるといい、well-defined な逆写像 f−1:B→Af^{-1} : B \to A を持つ。

∀x1,x2∈A, f(x1)=f(x2)  ⟹  x1=x2\forall x_1, x_2 \in A,\ f(x_1) = f(x_2) \implies x_1 = x_2

これは単射性の形式的な判定条件である:2つの入力が同じ出力を与えるならば、それらはもともと同じ入力でなければならない。全射性はその逆方向で判定され、すべての行き先に到達可能であることを要求する。

∀y∈B, ∃x∈A, f(x)=y\forall y \in B,\ \exists x \in A,\ f(x) = y
f:R→Rf:\mathbb{R}\to\mathbb{R} に対する3つの性質の比較
性質例単射?全射?
全単射f(x)=x3f(x)=x^3はいはい
単射のみf(x)=exf(x)=e^xはいいいえ
全射のみf(x)=x3−xf(x)=x^3-xいいえはい
どちらでもないf(x)=x2f(x)=x^2いいえいいえ

大学2つの重要な定理とその完全な証明

任意の集合 AA に対して ∣A∣<∣P(A)∣|A| < |\mathcal{P}(A)|:AA からそのべき集合 P(A)\mathcal{P}(A) への全射は存在せず、べき集合は真に大きい。

なぜ正しいのか?

これは「最大の無限」というものが存在しないことを示している——どんなに大きな集合からでも、そのべき集合を取るだけで真に大きな集合を作ることができる。この定理によって無限の階層が無限に続くことが避けられなくなり、その対角線論法という証明技法は、ある種の問題が計算不可能であることを示す議論の直接の祖先である。

証明

矛盾を導くために、全射 f:A→P(A)f : A \to \mathcal{P}(A) が存在すると仮定する;矛盾を導き、そのような全射が存在し得ないことを示す。

「対角線」集合 D={x∈A:x∉f(x)}D = \{x \in A : x \notin f(x)\} を定義する:これは ff による自分自身の像に属さない AA のすべての元を集めたものである。DD は AA の部分集合なので、P(A)\mathcal{P}(A) の元である。

ff が全射だと仮定しているので、f(a0)=Df(a_0) = D となる a0∈Aa_0 \in A が存在するはずである。ここで決定的な問いを立てる:a0∈Da_0 \in D だろうか?

もし a0∈Da_0 \in D ならば、DD の定義により a0∉f(a0)a_0 \notin f(a_0) である;しかし f(a0)=Df(a_0) = D なので、これは a0∉Da_0 \notin D を意味する——矛盾。もし逆に a0∉Da_0 \notin D ならば、DD の定義(ちょうど a0∈f(a0)a_0 \in f(a_0) となる元を除外する)により、a0∈f(a0)=Da_0 \in f(a_0) = D とならざるを得ない——再び矛盾。

いずれにせよ矛盾に至るので、全射 f:A→P(A)f : A \to \mathcal{P}(A) は存在し得ない。AA から P(A)\mathcal{P}(A) への単射 x↦{x}x \mapsto \{x\} と合わせると、まさに ∣A∣<∣P(A)∣|A| < |\mathcal{P}(A)| が得られる。

∣A∣≤∣B∣|A|\le|B| và ∣B∣≤∣A∣  ⟹  ∣A∣=∣B∣|B|\le|A| \implies |A|=|B| ならば、すなわち単射 A→BA \to B と単射 B→AB \to A が存在するならば、AA と BB の間に全単射が存在する。

なぜ正しいのか?

単射だけで濃度を比較すること(それぞれの集合がもう一方に収まること)だけで、有限集合の場合と同じく、両者はまったく同じ大きさになることが強制される。これにより、1つの難しい直接的全単射を作る代わりに、2つの易しい一方向の埋め込みを作ることで ∣A∣=∣B∣|A|=|B| を証明できる——これはまさに、区間 [0,1][0,1] と (0,1)(0,1) が同じ濃度を持つことを以下の例で示す方法である。

証明

与えられた2つの単射を f:A→Bf : A \to B、g:B→Ag : B \to A とする。考え方は、各元について ff と gg を交互に逆にたどって得られる祖先の連鎖を追跡し、各連鎖が「どこから始まるか」に応じて最終的な全単射を部分ごとに組み立てることである。

a∈Aa \in A に対して、後退連鎖 a,g−1(a),f−1(g−1(a)),…a, g^{-1}(a), f^{-1}(g^{-1}(a)), \ldots を、必要な逆写像が定義されている限り続けて定義し、b∈Bb \in B についても同様にする。各元の連鎖は、永遠に続くか、gg による原像を持たない AA の元で止まるか、ff による原像を持たない BB の元で止まるかのいずれかである。これにより AA は3つの部分 AAA_A(連鎖が AA で止まる)、ABA_B(連鎖が BB で止まる)、A∞A_\infty(連鎖が止まらない)に分割され、同様に BB も BA,BB,B∞B_A, B_B, B_\infty に分割される。

AA で止まる連鎖、または止まらない連鎖の上では、ff 自身がすでにその部分の AA から対応する部分の BB への全単射を与えている(これらの元は単射によって到達され、BB 側で先に「尽きる」ことがないため)。BB で止まる連鎖の上では、gg がその部分の BB から対応する部分の AA への全単射を与えるので、その逆写像 g−1g^{-1} がその部分の AA からその部分の BB への全単射を与える。

h:A→Bh : A \to B を、a∈AA∪A∞a \in A_A \cup A_\infty のとき h(a)=f(a)h(a) = f(a)、a∈ABa \in A_B のとき h(a)=g−1(a)h(a) = g^{-1}(a) と定義する。3つの部分は互いに素であり、それぞれが BB の対応する部分へ全単射で写る(ff は BA∪B∞B_A \cup B_\infty へ、g−1g^{-1} は BBB_B へ)ので、統合された写像 hh は AA 全体から BB 全体への全単射となり、∣A∣=∣B∣|A|=|B| が証明される。

大学実世界での応用と具体例

濃度は単なる抽象的な帳簿付けではない。ハッシュ関数は巨大な定義域(あらゆる可能なファイル、あらゆる可能なパスワード)を、はるかに小さい値域(32ビットや64ビットの整数)へ写す;定義域が値域より真に大きいため、ハッシュ関数がどれほど工夫されていても、カントール流の鳩の巣原理により衝突が必ず存在することが保証される。可逆データ圧縮とはまさに、より長いビット列からより短いビット列への単射である;短い文字列は長い文字列よりも真に少ないため、どんな圧縮アルゴリズムもすべての入力を縮小することはできない——一部の入力は大きくなるか、同じ大きさのままでなければならない。計算不可能性の結果(停止問題の決定不能性など)は、カントールの定理と同じ対角線論法を用いる:N→{0,1}\mathbb{N}\to\{0,1\} という可能な関数は非可算個存在するが、コンピュータプログラムは可算個しかないため、ほとんどすべての関数はどんなプログラムによっても計算不可能である。

例: N\mathbb{N} と Z\mathbb{Z} の間の具体的な全単射

f:Z→Nf : \mathbb{Z} \to \mathbb{N} を、n≥0n \ge 0 のとき f(n)=2nf(n) = 2n、n<0n < 0 のとき f(n)=−2n−1f(n) = -2n-1 と定義する。ff が全単射であることを示し、それを使って ∣Z∣=ℵ0|\mathbb{Z}| = \aleph_0 を結論せよ。f(−5)f(-5) はいくらか。

解答

この ff は非負整数を自然数の偶数へ、負の整数を自然数の奇数へ、外側にジグザグしながら送る:f(0)=0f(0)=0、f(−1)=1f(-1)=1、f(1)=2f(1)=2、f(−2)=3f(-2)=3、f(2)=4,…f(2)=4, \ldots

単射性:偶数の出力は n≥0n\ge 0 からのみ生じ(f(n)=2nf(n)=2n が nn を一意に決定する)、奇数の出力は n<0n<0 からのみ生じる(f(n)=−2n−1f(n)=-2n-1 が nn を一意に決定する)。各場合において ff は狭義単調なので、異なる2つの整数が同じ出力を共有することはない。

全射性:すべての偶数の自然数 2k2k(k≥0k\ge 0)は f(k)f(k) であり、すべての奇数の自然数 2k+12k+1(k≥0k\ge 0)は f(−(k+1))f(-(k+1)) であるので、すべての自然数に到達する。

ff が全単射 Z→N\mathbb{Z} \to \mathbb{N} であるので、Z\mathbb{Z} と N\mathbb{N} は同じ濃度 ℵ0\aleph_0 を持ち、Z\mathbb{Z} が2倍大きく見えるにもかかわらず ∣Z∣=ℵ0|\mathbb{Z}| = \aleph_0 が確認される。

最後に f(−5)f(-5):−5<0-5 < 0 なので f(n)=−2n−1f(n) = -2n - 1 を使い、f(−5)=−2×(−5)−1=10−1=9f(-5) = -2 \times (-5) - 1 = 10 - 1 = 9。

例: ハッシュ衝突に対する鳩の巣原理

あるハッシュ関数は任意のファイルを 3232 ビットのコードへ写すので、可能なコードは正確に 2322^{32} 個である。ある会社が55十億個(5,000,000,0005{,}000{,}000{,}000)の異なるファイルを保存している。濃度・鳩の巣原理を用いて、少なくとも2つのファイルが同じハッシュコードを共有することが保証される理由を説明し、最低限避けられない「衝突ペア」の数を見積もれ。

解答

ハッシュ関数の値域はちょうど 232=4,294,967,2962^{32} = 4{,}294{,}967{,}296 個の元を持つ——この集合を BB と呼ぶ。ハッシュ化されるファイルの定義域 AA は 5,000,000,0005{,}000{,}000{,}000 個の元を持ち、5,000,000,000>4,294,967,2965{,}000{,}000{,}000 > 4{,}294{,}967{,}296 なので ∣A∣>∣B∣|A| > |B| である。

(有限の)鳩の巣原理——「より大きい有限集合からより小さい集合への単射は存在し得ない」という有限版の主張——により、ハッシュ関数を写像 A→BA \to B とみなすと、それは単射ではあり得ない:もし単射ならば ∣A∣≤∣B∣|A| \le |B| となり、∣A∣>∣B∣|A| > |B| と矛盾する。よって少なくとも2つの異なるファイルが同じハッシュコードを割り当てられなければならない。

最低限避けられない衝突の数を見積もる:5,000,000,0005{,}000{,}000{,}000 個のファイルを 4,294,967,2964{,}294{,}967{,}296 個のバケットにできるだけ均等に配分しても、少なくとも ⌈5,000,000,000/4,294,967,296⌉=2\lceil 5{,}000{,}000{,}000 / 4{,}294{,}967{,}296 \rceil = 2 個のファイルがどこかのバケットに入り、重複せざるを得ない「余剰」ファイルの数は少なくとも 5,000,000,000−4,294,967,296=705,032,7045{,}000{,}000{,}000 - 4{,}294{,}967{,}296 = 705{,}032{,}704 である。

したがって、少なくとも約705705百万個のファイルが、すでに他のファイルが使っているバケットに入らざるを得ない——これはハッシュ関数がどれほど巧妙に設計されていても、∣A∣>∣B∣|A| > |B| から直接かつ不可避的に生じる帰結である。

AA の異なる元が常に BB の異なる元に写るために f:A→Bf:A\to B が持つべき性質はどれか。

∣A∣=5|A|=5 のとき、カントールの定理により ∣P(A)∣|\mathcal{P}(A)| はいくらか。

16ビットのハッシュ関数は 2162^{16} 通りの出力を持つ。あるシステムが 100,000100{,}000 個の異なるファイルをハッシュ化する場合、鳩の巣原理/濃度の議論は何を保証するか。

カントール・ベルンシュタイン・シュレーダーの定理の仮定は何を要求するか。

参考文献

  1. Paul R. Halmos (1960). Naive Set Theory
  2. Karel Hrbacek, Thomas Jech (1999). Introduction to Set Theory