มานับอนันต์กันเถอะ Let’s Count beyond the Infinity

Mutinan Phaohing
Jul 22, 2017 · 3 min read

เริ่มด้วยปริศนาขบคิดเล็กๆ
กำหนดเซ็ตตัวเลขจำนวนเต็มสองเซ็ต เซ็ตแรกคือจำนวนนับปกติธรรมดาเลย ให้เป็นชื่อว่า 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 ถ้าเรารู้ว่ามี

  1. ฟังก์ชัน injective จาก A ไปยัง B จะได้ว่า |A|≤|B|
  2. ฟังก์ชัน surjective จาก A ไปยัง B จะได้ว่า |A|≥|B|

ถ้า |A|≤|B| และ |A|≥|B| แล้ว |A|=|B| ไปโดยปริยาย

โรงแรมของฮิลเบิร์ท The Hilbert’s Hotel

มีเกร็ดขำๆมาให้ดู ไครงงข้ามได้ ๕๕๕๕

สมมติโรงแรมลึกลับมีแห่งหนึ่ง มีคนอยู่เต็มทุกห้อง และมีห้องไม่จำกัดจำนวน จะมีข้อเท็จจริงดังต่อไปนี้

  1. เราสามารถรับคนเพิ่มเข้าโรงแรม 1 คน โดยที่ขนาด(cardinal) ของโรงแรมไม่เปลี่ยน |N ∪ {ผู้อาศัยคนใหม่}| = |N|
  2. หรือแขกในโรงแรมย้ายออกไปสักคนขนาด(cardinal) ของโรงแรมก็ไม่เปลี่ยน |N-{คนออก}| =|N|
  3. สมมติมีผู้อาศัยมาพัก จากรถที่บรรจุคนได้ไม่จำกัดสองคัน ดังนี้
    คันที่ 1 ให้เป็นเซ็ต A = {คนที่1จากรถคันที่1, คนที่2จากรถคันที่1, คนที่3จากรถคันที่1, … } มีขนาดเท่ากับ |N|
    คันที่ 2 ให้เป็นเซ็ต B ={คนที่1จากรถคันที่2, คนที่2จากรถคันที่2, คนที่3จากรถคันที่2, … } มีขนาดเท่ากับ |N| เช่นกัน
    จับคนทั้งหมดไปใส่ในโรงแรม จะได้ว่า |A ∪ B| = |N| เช่นเดิม
  4. จากข้อสามเราสามารถเพิ่มรถได้ไม่จำกัดคัน ถ้า A¹ แทนรถคันที่ 1 A² แทนรถคันที่สอง , จะได้ว่า |A¹∪A²∪….. | = |N| นั่นคือ |A x A| = |N|
มึนไหมล่ะ

การนับอนันต์

สมมติเซ็ตหนึ่งเป็นเซ็ตที่มีสมาชิกมากมาย แต่เราสามารถแปะป้ายให้ได้ว่า นี่คือสมาชิกตัวที่ 1 นะ อันนี้คือสมาชิกตัวที่ 2 แบบนี้ได้ทุกตัวแบบไม่ซ้ำกัน เราจะพบว่าเซ็ตที่สามารถทำได้มีขนาดเท่ากับ |N| เมื่อ N คือเซ็ตของจำนวนนับ เราจะเรียกเซ็ตแบบนี้ว่า เซ็ตอนันต์นับได้

หรืออย่างเป็นทางการคือ ถ้ามี bijective function จา่กเซ็ต A ไปยังเซ็ตจำนวนนับ N (|A|=|N|) แล้วเซ็ต A จะเป็นเซ็ตที่สามารถนับได้(countable set)

ตัวอย่างเซ็ตอนันต์ที่สามารถนับได้

  1. เซ็ต N (จำนวนนับไงจะไครล่ะ)
  2. เซ็ต Z (จำนวนเต็ม) เรียงแบบนี้ {0, -1, 1, -2, 2, … }
  3. N x N เซ็ตนี้สามารถเรียงให้เป็น N ได้ด้วยนะ วิธีตามข้างล่าง
  4. จากข้อ 2 และ 3 จะได้ว่า Z x Z ก็นับได้ด้วยเหมือนกัน
  5. จำนวนตรรกะ (เขียนในรูป a/b ของจำนวนเต็ม) ก็นับได้เหมือนกัน คล้ายๆข้อ 4
วิธีแปะป้ายหมายเลขให้กับ N x N

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 ไม่สามารถนับได้
  • ดังนั้นโปรแกรมจะไม่สามารถคำนวนจำนวนจริงบางตัวออกมาได้….
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade