MathLabs

Nền tảng toán học

Ánh xạ và lực lượng

Một ánh xạ f:A→Bf:A\to B là đơn ánh nếu không bao giờ gửi hai phần tử khác nhau tới cùng một chỗ, toàn ánh nếu mọi phần tử của BB đều đạt tới, và song ánh nếu cả hai đều đúng. Song ánh cho phép ta so sánh kích thước các tập vô hạn: ∣N∣=∣Z∣=∣Q∣=ℵ0|\mathbb{N}| = |\mathbb{Z}| = |\mathbb{Q}| = \aleph_0, vì cả ba đều thừa nhận một song ánh tường minh với N\mathbb{N}. Định lý Cantor, ∣A∣<∣P(A)∣|A| < |\mathcal{P}(A)|, được chứng minh bằng lập luận đường chéo dùng D={x∈A:x∉f(x)}D = \{x \in A : x \notin f(x)\}, cho thấy tập lũy thừa luôn lớn hơn thực sự, nên có một hệ thống phân tầng vô hạn của các vô hạn; định lý Cantor–Bernstein–Schröder cho thấy ∣A∣≤∣B∣|A|\le|B| và ∣B∣≤∣A∣  ⟹  ∣A∣=∣B∣|B|\le|A| \implies |A|=|B|, cho phép so sánh lực lượng bằng hai đơn ánh một chiều dễ dàng thay vì một song ánh khó. Những ý tưởng này là nền tảng của va chạm hàm băm, giới hạn của nén dữ liệu, và tính không thể tính được của một số bài toán.

Trực giácGhép hai đống đồ vật, và đống nào lớn hơn

Một ánh xạ f:A→Bf : A \to B gán cho mỗi phần tử của AA đúng một phần tử của BB. Hãy hình dung nó như các mũi tên từ AA đến BB: đơn ánh nghĩa là không có hai mũi tên nào cùng trúng một điểm của BB, toàn ánh nghĩa là mọi điểm của BB đều có mũi tên trúng vào, và song ánh nghĩa là cả hai cùng lúc, một phép ghép cặp hoàn hảo một-một. Khi AA và BB là vô hạn, một song ánh chính là cách ta nói chúng có cùng kích thước, cùng lực lượng, dù đếm từng cái một là không thể.

Đồ thị tương tác của hàm bậc ba y=x^3 cho thấy nó là song ánh trên tập số thực
Hàm bậc ba tăng chặt y=x3y = x^3 là song ánh R→R\mathbb{R}\to\mathbb{R}: mọi đường ngang cắt đồ thị đúng một lần.

Đại họcĐơn ánh, toàn ánh, song ánh: định nghĩa hình thức

Định nghĩa: Đơn ánh, toàn ánh, song ánh

Một ánh xạ f:A→Bf : A \to B là đơn ánh nếu các phần tử phân biệt của AA luôn được ánh xạ tới các phần tử phân biệt của BB. Nó là toàn ánh nếu mọi phần tử của BB đều là ảnh của một phần tử nào đó của AA. Nó là song ánh nếu cả hai đều đúng, khi đó nó có ánh xạ ngược f−1:B→Af^{-1} : B \to A xác định rõ ràng.

∀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

Đây là bài kiểm tra hình thức cho tính đơn ánh: bất cứ khi nào hai đầu vào cho cùng một đầu ra, chúng vốn phải là cùng một đầu vào. Tính toàn ánh được kiểm theo chiều ngược lại, yêu cầu mọi đích đến đều có thể đạt tới.

∀y∈B, ∃x∈A, f(x)=y\forall y \in B,\ \exists x \in A,\ f(x) = y
So sánh ba tính chất với f:R→Rf:\mathbb{R}\to\mathbb{R}
Tính chấtVí dụĐơn ánh?Toàn ánh?
Song ánhf(x)=x3f(x)=x^3CóCó
Chỉ đơn ánhf(x)=exf(x)=e^xCóKhông
Chỉ toàn ánhf(x)=x3−xf(x)=x^3-xKhôngCó
Không cái nàof(x)=x2f(x)=x^2KhôngKhông

Đại họcHai định lý then chốt, kèm chứng minh đầy đủ

Định lý: Định lý Cantor

Với mọi tập AA, ∣A∣<∣P(A)∣|A| < |\mathcal{P}(A)|: không có toàn ánh nào từ AA lên tập lũy thừa P(A)\mathcal{P}(A) của nó, nên tập lũy thừa lớn hơn thực sự.

Vì sao đúng?

Điều này cho thấy không có "vô hạn lớn nhất" nào cả — từ bất kỳ tập nào, dù lớn đến đâu, ta luôn có thể xây một tập lớn hơn thực sự chỉ bằng cách lấy tập lũy thừa của nó. Đây là định lý khiến một hệ thống phân tầng vô hạn của các vô hạn trở nên không thể tránh khỏi, và kỹ thuật chứng minh bằng đường chéo của nó là tổ tiên trực tiếp của các lập luận dùng để chỉ ra một số bài toán là không thể tính được.

Chứng minh

Giả sử phản chứng rằng có một toàn ánh f:A→P(A)f : A \to \mathcal{P}(A); ta sẽ suy ra mâu thuẫn, chứng tỏ không thể tồn tại toàn ánh như vậy.

Định nghĩa tập "đường chéo" D={x∈A:x∉f(x)}D = \{x \in A : x \notin f(x)\}: nó gom mọi phần tử của AA mà không thuộc ảnh của chính nó qua ff. Vì DD là tập con của AA, nó là một phần tử của P(A)\mathcal{P}(A).

Vì ff được giả sử là toàn ánh, phải tồn tại a0∈Aa_0 \in A với f(a0)=Df(a_0) = D. Bây giờ đặt câu hỏi quyết định: a0∈Da_0 \in D hay không?

Nếu a0∈Da_0 \in D, thì theo định nghĩa của DD, a0∉f(a0)a_0 \notin f(a_0); nhưng f(a0)=Df(a_0) = D, nên điều này có nghĩa a0∉Da_0 \notin D — mâu thuẫn. Nếu thay vào đó a0∉Da_0 \notin D, thì theo định nghĩa của DD (loại trừ đúng những phần tử có a0∈f(a0)a_0 \in f(a_0)), điều này buộc a0∈f(a0)=Da_0 \in f(a_0) = D — lại mâu thuẫn.

Dù theo cách nào ta cũng gặp mâu thuẫn, nên không thể tồn tại toàn ánh f:A→P(A)f : A \to \mathcal{P}(A). Kết hợp với đơn ánh x↦{x}x \mapsto \{x\} từ AA vào P(A)\mathcal{P}(A), điều này cho đúng ∣A∣<∣P(A)∣|A| < |\mathcal{P}(A)|.

Nếu ∣A∣≤∣B∣|A|\le|B| và ∣B∣≤∣A∣  ⟹  ∣A∣=∣B∣|B|\le|A| \implies |A|=|B|, nghĩa là có một đơn ánh A→BA \to B và một đơn ánh B→AB \to A, thì tồn tại song ánh giữa AA và BB.

Vì sao đúng?

So sánh lực lượng chỉ bằng đơn ánh (mỗi tập vừa khít vào tập kia) đã buộc hai tập phải có cùng kích thước hệt như với tập hữu hạn. Điều này cho phép chứng minh ∣A∣=∣B∣|A|=|B| bằng cách xây hai phép nhúng một chiều dễ dàng thay vì một song ánh trực tiếp khó — đây chính xác là cách các ví dụ dưới đây cho thấy khoảng [0,1][0,1] và (0,1)(0,1) có cùng lực lượng.

Chứng minh

Gọi f:A→Bf : A \to B và g:B→Ag : B \to A là hai đơn ánh đã cho. Ý tưởng là truy vết, với mỗi phần tử, chuỗi tổ tiên thu được bằng cách lần lượt gỡ ngược ff và gg, rồi xây song ánh cuối cùng từng phần tùy theo mỗi chuỗi "bắt đầu" ở đâu.

Với a∈Aa \in A, định nghĩa chuỗi lùi a,g−1(a),f−1(g−1(a)),…a, g^{-1}(a), f^{-1}(g^{-1}(a)), \ldots, tiếp tục miễn là nghịch đảo cần dùng còn xác định, và tương tự với b∈Bb \in B. Chuỗi của mỗi phần tử hoặc lùi mãi mãi, hoặc dừng ở một phần tử của AA không có tiền ảnh qua gg, hoặc dừng ở một phần tử của BB không có tiền ảnh qua ff. Điều này chia AA thành ba phần AAA_A (chuỗi dừng ở AA), ABA_B (chuỗi dừng ở BB), A∞A_\infty (chuỗi không bao giờ dừng), và tương tự chia BB thành BA,BB,B∞B_A, B_B, B_\infty.

Trên các chuỗi dừng ở AA hoặc không bao giờ dừng, chính ff đã cho một song ánh từ phần đó của AA lên phần tương ứng của BB (vì các phần tử này đạt được qua đơn ánh và không có gì "hết" ở phía BB trước). Trên các chuỗi dừng ở BB, chính gg cho một song ánh từ phần tương ứng của BB ngược về phần đó của AA, nên nghịch đảo g−1g^{-1} của nó cho một song ánh từ phần đó của AA lên phần đó của BB.

Định nghĩa h:A→Bh : A \to B bởi h(a)=f(a)h(a) = f(a) nếu a∈AA∪A∞a \in A_A \cup A_\infty, và h(a)=g−1(a)h(a) = g^{-1}(a) nếu a∈ABa \in A_B. Vì ba phần rời nhau và mỗi phần ánh xạ song ánh lên phần khớp của BB (ff lên BA∪B∞B_A \cup B_\infty, g−1g^{-1} lên BBB_B), ánh xạ gộp hh là một song ánh từ toàn bộ AA lên toàn bộ BB, chứng minh ∣A∣=∣B∣|A|=|B|.

Đại họcỨng dụng thực tiễn và Ví dụ minh họa

Lực lượng không chỉ là sổ sách trừu tượng. Hàm băm ánh xạ một miền khổng lồ (mọi tệp có thể có, mọi mật khẩu có thể có) vào một miền đích nhỏ hơn nhiều (một số nguyên 32-bit hay 64-bit); vì miền nguồn lớn hơn thực sự miền đích, lập luận kiểu chuồng bồ câu của Cantor đảm bảo va chạm phải xảy ra, dù hàm băm có khéo léo đến đâu. Nén dữ liệu không mất thông tin chính xác là một đơn ánh từ các chuỗi bit dài hơn sang ngắn hơn; vì có ít chuỗi ngắn hơn hẳn số chuỗi dài, không bộ nén nào có thể thu nhỏ mọi đầu vào có thể — một số đầu vào buộc phải tăng kích thước hoặc giữ nguyên. Kết quả không thể tính được (như tính không quyết định được của bài toán dừng) dùng đúng lập luận đường chéo như định lý Cantor: có vô số không đếm được các hàm N→{0,1}\mathbb{N}\to\{0,1\} có thể nhưng chỉ có vô số đếm được các chương trình máy tính, nên hầu như mọi hàm đơn giản là không thể tính được bởi bất kỳ chương trình nào.

Ví dụ: Một song ánh cụ thể giữa N\mathbb{N} và Z\mathbb{Z}

Định nghĩa f:Z→Nf : \mathbb{Z} \to \mathbb{N} bởi f(n)=2nf(n) = 2n nếu n≥0n \ge 0 và f(n)=−2n−1f(n) = -2n-1 nếu n<0n < 0. Hãy chỉ ra ff là song ánh, và dùng nó để kết luận ∣Z∣=ℵ0|\mathbb{Z}| = \aleph_0. Tính f(−5)f(-5).

Lời giải

ff này gửi số nguyên không âm tới số tự nhiên chẵn và số nguyên âm tới số tự nhiên lẻ, ngoằn ngoèo dần ra ngoài: 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 ánh: đầu ra chẵn chỉ đến từ n≥0n\ge 0 (nơi f(n)=2nf(n)=2n xác định nn duy nhất) và đầu ra lẻ chỉ đến từ n<0n<0 (nơi f(n)=−2n−1f(n)=-2n-1 xác định nn duy nhất), và trong mỗi trường hợp ff đơn điệu chặt, nên không có hai số nguyên phân biệt nào cho cùng đầu ra.

Toàn ánh: mọi số tự nhiên chẵn 2k2k (k≥0k\ge 0) là f(k)f(k), và mọi số tự nhiên lẻ 2k+12k+1 (k≥0k\ge 0) là f(−(k+1))f(-(k+1)), nên mọi số tự nhiên đều đạt tới.

Vì ff là song ánh Z→N\mathbb{Z} \to \mathbb{N}, Z\mathbb{Z} và N\mathbb{N} có cùng lực lượng, ℵ0\aleph_0, xác nhận ∣Z∣=ℵ0|\mathbb{Z}| = \aleph_0 — dù Z\mathbb{Z} trông như lớn gấp đôi.

Cuối cùng, f(−5)f(-5): vì −5<0-5 < 0, dùng f(n)=−2n−1f(n) = -2n - 1, nên f(−5)=−2×(−5)−1=10−1=9f(-5) = -2 \times (-5) - 1 = 10 - 1 = 9.

Ví dụ: Lập luận chuồng bồ câu cho va chạm hàm băm

Một hàm băm ánh xạ tệp bất kỳ tới mã 3232-bit, nên có đúng 2322^{32} mã có thể. Một công ty lưu 55 tỷ tệp phân biệt (5,000,000,0005{,}000{,}000{,}000). Hãy giải thích, dùng lập luận lực lượng/chuồng bồ câu, vì sao chắc chắn có ít nhất hai tệp cùng mã băm, và ước lượng số "cặp va chạm" tối thiểu không thể tránh khỏi.

Lời giải

Miền đích của hàm băm có đúng 232=4,294,967,2962^{32} = 4{,}294{,}967{,}296 phần tử — gọi tập này là BB. Miền nguồn các tệp được băm, AA, có 5,000,000,0005{,}000{,}000{,}000 phần tử, và ∣A∣>∣B∣|A| > |B| vì 5,000,000,000>4,294,967,2965{,}000{,}000{,}000 > 4{,}294{,}967{,}296.

Theo nguyên lý chuồng bồ câu (hữu hạn) — phiên bản hữu hạn của "không đơn ánh nào có thể tồn tại từ một tập hữu hạn lớn hơn vào một tập nhỏ hơn" — hàm băm, xem như ánh xạ A→BA \to B, không thể là đơn ánh: nếu nó là đơn ánh thì sẽ cho ∣A∣≤∣B∣|A| \le |B|, mâu thuẫn với ∣A∣>∣B∣|A| > |B|. Vậy ít nhất hai tệp phân biệt phải được gán cùng một mã băm.

Để ước lượng số va chạm tối thiểu không thể tránh: phân bố 5,000,000,0005{,}000{,}000{,}000 tệp đều nhất có thể trên 4,294,967,2964{,}294{,}967{,}296 ô đặt ít nhất ⌈5,000,000,000/4,294,967,296⌉=2\lceil 5{,}000{,}000{,}000 / 4{,}294{,}967{,}296 \rceil = 2 tệp vào một ô nào đó, và số tệp "dư" buộc phải trùng ô ít nhất là 5,000,000,000−4,294,967,296=705,032,7045{,}000{,}000{,}000 - 4{,}294{,}967{,}296 = 705{,}032{,}704.

Vậy ít nhất khoảng 705705 triệu tệp buộc phải rơi vào ô đã có tệp khác — hệ quả trực tiếp, không thể tránh khỏi của ∣A∣>∣B∣|A| > |B|, bất kể hàm băm được thiết kế khéo léo đến đâu.

Ánh xạ f:A→Bf:A\to B cần tính chất nào để các phần tử phân biệt của AA luôn ánh xạ tới phần tử phân biệt của BB?

Nếu ∣A∣=5|A|=5, định lý Cantor cho ∣P(A)∣|\mathcal{P}(A)| bằng bao nhiêu?

Một hàm băm 16-bit có 2162^{16} đầu ra có thể. Nếu hệ thống băm 100,000100{,}000 tệp phân biệt, lập luận chuồng bồ câu/lực lượng đảm bảo điều gì?

Giả thiết của định lý Cantor–Bernstein–Schröder yêu cầu gì?

Tài liệu tham khảo

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