
มานับอนันต์กันเถอะ Let’s Count beyond the Infinity
เริ่มด้วยปริศนาขบคิดเล็กๆ
กำหนดเซ็ตตัวเลขจำนวนเต็มสองเซ็ต เซ็ตแรกคือจำนวนนับปกติธรรมดาเลย ให้เป็นชื่อว่า A = {0,1,2,3,4,5,…} อีกเซ็ตหนึ่งคือเซ็ตของจำนวนนับที่เป็นจำนวนยกกำลังสอง ให้ชื่อว่า B = {0,1,2,9,16,25,…}
คำถามที่ไม่มีรางวัลใดๆให้ในวันนี้คืออออ เซ็ต A หรือ B ใหญ่กว่ากัน
เชื่อว่าตามสามัญสำนึกแห่งความเป็นมนุษย์จะส่งแรงผลักให้เราชูมือตอบอย่างรวดเร็วว่า เซ็ต A ใหญ่กว่าเซ็ต B
เหตุผล?
โห~ ง่ายจะตาย ก็ทุกๆสมาชิกของ B ไม่ว่าจะตัวอะไรก็ตามถูกบรรจุอยู่ใน A ไงล่ะ

หยุดก่อน….
ลองถามตัวเองเล่นๆดูว่า เซ็ต A นี่มีสมาชิกกี่ตัว…
สมาชิกใน A หน้าตาแบบนี้ 0,1,2,3,4,… งั้นมันน่าจะมีจำนวนเท่าๆกับการที่จับสมาชิกแต่ละตัวในเซ็ตมายกกำลังสองว่าไหม?
หน้าตาแบบนี้
0²,1²,2²,3²,4²,… =====> 0,1,2,9,16,…

เพราะเราไม่ได้เพิ่มสมาชิกอะไรใหม่เข้าไปเลย เราสนใจแค่จำนวนสมาชิก ดังนั้นจำนวนไม่ได้เปลี่ยนแปลงใดๆ
มองมุมกลับกันลองมองว่าทุกๆสมาชิกใน B จับไปใส่รากที่สองหน่อย เราจะได้เซ็ตที่หน้าตาประมาณนี้
{0,1,2,3,4,5,…}
แต่ละตัวเกิดขึ้นจาก sqrt(สมาชิกใน B) อย่างละตัวเท่านั้น จำนวนสมาชิกเลยเท่ากัน

ถ้าเป็นแบบนี้ ขนาดของเซ็ตทั้งสองก็คงเท่ากัน
ความเป็นจริงก็คือ เราผิดพลาดอยู่ที่พยายามเอาความเป็นเซ็ตย่อยเข้ามาอธิบายปริมาณสมาชิกที่มีความเป็นอนันต์ ด้วยการบังตารางแผนภาพแวน ออยเลอร์ที่เราเรียนกันมา ไม่สามารถอธิบายถึงความเป็นอนันต์ได้อีก….
ยังโชคดีที่โลกนี้มีคนชื่อคันทอร์ (Cantor) ผู้ซึ่งช่วยชีวิตพวกเราจากความมึงงงของความเป็นอนันต์ด้วยคำอธิบายง่ายๆนี้
นิยามของคันทอร์ Cantor’s Definition
เซ็ตสองตัวจะมีขนาด (Cardinal) ที่เท่ากัน ถ้ามีฟังก์ชัน bijective (ไครไม่รู้จัก อ่านได้ที่นี่ เบาสมองๆ) จากเซ็ตหนึ่งไปสู่อีกเซ็ตหนึ่ง
ปกตินิยมใช้ |A| แทนขนาดของเซ็ต A
จากตัวอย่างข้างต้น
A = {0,1,2,3,4,5,…}
B = {0,1,2,9,16,25,…}
เราสามารถหาฟังก์ชัน bijective ได้ดังนี้คือ f(x) = x² จากนิยามจะได้ว่า
|A| = |B|

ค่อนข้างชัดเจนในภาพได้อธิบายว่าจริงๆ สองเซ็ตนี้ก็ขนาดเท่ากันนั่นแหละ
นอกจาก bijective ถ้าเรารู้ว่ามี
- ฟังก์ชัน injective จาก A ไปยัง B จะได้ว่า |A|≤|B|
- ฟังก์ชัน surjective จาก A ไปยัง B จะได้ว่า |A|≥|B|
ถ้า |A|≤|B| และ |A|≥|B| แล้ว |A|=|B| ไปโดยปริยาย
โรงแรมของฮิลเบิร์ท The Hilbert’s Hotel
มีเกร็ดขำๆมาให้ดู ไครงงข้ามได้ ๕๕๕๕
สมมติโรงแรมลึกลับมีแห่งหนึ่ง มีคนอยู่เต็มทุกห้อง และมีห้องไม่จำกัดจำนวน จะมีข้อเท็จจริงดังต่อไปนี้
- เราสามารถรับคนเพิ่มเข้าโรงแรม 1 คน โดยที่ขนาด(cardinal) ของโรงแรมไม่เปลี่ยน |N ∪ {ผู้อาศัยคนใหม่}| = |N|
- หรือแขกในโรงแรมย้ายออกไปสักคนขนาด(cardinal) ของโรงแรมก็ไม่เปลี่ยน |N-{คนออก}| =|N|
- สมมติมีผู้อาศัยมาพัก จากรถที่บรรจุคนได้ไม่จำกัดสองคัน ดังนี้
คันที่ 1 ให้เป็นเซ็ต A = {คนที่1จากรถคันที่1, คนที่2จากรถคันที่1, คนที่3จากรถคันที่1, … } มีขนาดเท่ากับ |N|
คันที่ 2 ให้เป็นเซ็ต B ={คนที่1จากรถคันที่2, คนที่2จากรถคันที่2, คนที่3จากรถคันที่2, … } มีขนาดเท่ากับ |N| เช่นกัน
จับคนทั้งหมดไปใส่ในโรงแรม จะได้ว่า |A ∪ B| = |N| เช่นเดิม - จากข้อสามเราสามารถเพิ่มรถได้ไม่จำกัดคัน ถ้า A¹ แทนรถคันที่ 1 A² แทนรถคันที่สอง , จะได้ว่า |A¹∪A²∪….. | = |N| นั่นคือ |A x A| = |N|

การนับอนันต์
สมมติเซ็ตหนึ่งเป็นเซ็ตที่มีสมาชิกมากมาย แต่เราสามารถแปะป้ายให้ได้ว่า นี่คือสมาชิกตัวที่ 1 นะ อันนี้คือสมาชิกตัวที่ 2 แบบนี้ได้ทุกตัวแบบไม่ซ้ำกัน เราจะพบว่าเซ็ตที่สามารถทำได้มีขนาดเท่ากับ |N| เมื่อ N คือเซ็ตของจำนวนนับ เราจะเรียกเซ็ตแบบนี้ว่า เซ็ตอนันต์นับได้
หรืออย่างเป็นทางการคือ ถ้ามี bijective function จา่กเซ็ต A ไปยังเซ็ตจำนวนนับ N (|A|=|N|) แล้วเซ็ต A จะเป็นเซ็ตที่สามารถนับได้(countable set)
ตัวอย่างเซ็ตอนันต์ที่สามารถนับได้
- เซ็ต N (จำนวนนับไงจะไครล่ะ)
- เซ็ต Z (จำนวนเต็ม) เรียงแบบนี้ {0, -1, 1, -2, 2, … }
- N x N เซ็ตนี้สามารถเรียงให้เป็น N ได้ด้วยนะ วิธีตามข้างล่าง
- จากข้อ 2 และ 3 จะได้ว่า Z x Z ก็นับได้ด้วยเหมือนกัน
- จำนวนตรรกะ (เขียนในรูป a/b ของจำนวนเต็ม) ก็นับได้เหมือนกัน คล้ายๆข้อ 4

binary string ล่ะ?
เซ็ตของไบนารี่สตริง คือเซ็ตของสายอักขระที่ประกอบด้วย 0 และ 1 กี่ตัวก็ได้ ดังตัวอย่าง
{ ε, 0, 1, 00, 01, 10, 11, 000, 001, 010, 011, 100, … }
ก็เป็นเซ็ตนับได้เช่นกัน โดยการแปลงให้เป็นเลขฐานสิบก่อนนั่นคือ |{0,1}*| = |N|
ในทำของเดียวกับ ไม่ว่าเซ็ตอักขระจะหน้าตาเป้นยังไง ถ้าเป้นเซ็ตจำกัด ก็ยังสามารถนับได้อยู่เช่นเดิมเช่น |{a,b,c,…,z}*| = |N| หรือ | Σ*| = |N| เมื่อ Σ คือเซ็ตอักขระใดๆ ที่มีสมาชิกเป็นจำนวนจำกัด
ข้อเท็จจริงสนุกๆ ส่งท้าย(หรอออ…)
- โปรแกรมทุกอย่างบนโลกนี้สุดท้ายถูกคอมไพล์กลายเป็น binary string ให้คอมพิวเตอร์เข้าใจ ดังนั้น โปรแกรมทุกอย่างบนโลกนี้สามารถนับได้….
- พหุนาม(polynomial) ทั้งหมดบนโลกนี้ก็นับได้ด้วยการมองสิ่งที่ประกอบไปด้วยอักขระหน้าตาแบบนี้ |{0,1,…,9,+,-,*,/,^,x}*| = |N|
- เซ็ตจำนวนจริง R ไม่สามารถนับได้
- ดังนั้นโปรแกรมจะไม่สามารถคำนวนจำนวนจริงบางตัวออกมาได้….
