পাঠ ১১ · ৪৪-এর মধ্যে · মডিউল ২
Home / Courses / Discrete Mathematics / ফাংশন ও কার্ডিনালিটি

ফাংশন — ইনজেকটিভ, সারজেক্টিভ, বাইজেকটিভ ও কার্ডিনালিটি

Functions — injective, surjective, bijective & cardinality
৯ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • ফাংশনের আনুষ্ঠানিক সংজ্ঞা — domain, codomain, range
  • injective, surjective, bijective-এর সঠিক সংজ্ঞা ও পার্থক্য
  • কার্ডিনালিটি ও বাইজেকশনের মাধ্যমে অসীম সেটের আকার তুলনা
  • Python দিয়ে ℕ↔ℤ zigzag বাইজেকশন যাচাই করা

১ · ফাংশনের সংজ্ঞা

একটি ফাংশন (Function)Function$A$-এর প্রতিটি উপাদানকে $B$-এর ঠিক একটি উপাদানের সাথে সংযুক্ত করে এমন একটি রিলেশন — কোনো উপাদান বাদ যেতে পারবে না, এবং কোনো উপাদানের একাধিক আউটপুট থাকতে পারবে না। $f: A \to B$ হলো এমন একটি নিয়ম যা $A$-এর প্রতিটি উপাদানকে $B$-এর ঠিক একটি উপাদানে পাঠায়। $A$-কে বলা হয় domain, $B$-কে codomain, এবং $f$-এর মাধ্যমে প্রকৃতপক্ষে যেসব মান পাওয়া যায় তার সেটকে বলা হয় range বা image (যা codomain-এর একটি সাবসেট, সমান নাও হতে পারে)।

২ · Injective, Surjective, Bijective

InjectiveInjective (One-to-One)$f(x)=f(y) \Rightarrow x=y$ — দুটি ভিন্ন ইনপুট কখনো একই আউটপুট দেয় না।
$f(x)=f(y) \Rightarrow x=y$ — কোনো আউটপুট দুইবার আসে না।
SurjectiveSurjective (Onto)$\forall b \in B,\ \exists a \in A,\ f(a)=b$ — codomain-এর প্রতিটি উপাদান অন্তত একবার আউটপুট হিসেবে আসে।
$\forall b \in B\ \exists a,\ f(a)=b$ — কোনো আউটপুট বাদ যায় না।
BijectiveBijectiveএকসাথে injective ও surjective — $A$ ও $B$-এর মধ্যে একটি পূর্ণাঙ্গ, এক-এক পেয়ারিং তৈরি হয়।
injective + surjective — একটি নিখুঁত জোড় (perfect pairing)।

উদাহরণ: $f:\{1,2,3\}\to\{a,b,c,d\}$, $f(1)=a, f(2)=b, f(3)=c$ — injective (কোনো পুনরাবৃত্তি নেই) কিন্তু surjective নয় ($d$ কখনো আউটপুট হয় না)। $g:\{1,2\}\to\{a\}$, $g(1)=g(2)=a$ — surjective ($a$ পাওয়া যায়) কিন্তু injective নয় ($1,2$ একই আউটপুট দেয়)। $h:\{1,2\}\to\{a,b\}$, $h(1)=a, h(2)=b$ — উভয়ই সিদ্ধ, তাই bijective।

৩ · কার্ডিনালিটি ও বাইজেকশন

দুটি সেট $A$ ও $B$-এর কার্ডিনালিটি সমান ($|A|=|B|$) হয় যদি ও শুধু যদি $A$ থেকে $B$-তে একটি বাইজেকশন (Bijection)Bijectionএকটি bijective ফাংশন — $A$ ও $B$-এর মধ্যে প্রতিটি উপাদানের জন্য ঠিক একটি জোড়া তৈরি হওয়া, কোনো বাদ বা পুনরাবৃত্তি ছাড়া। থাকে। সসীম সেটের জন্য এটি স্বজ্ঞাত গণনার সাথে মিলে যায়। কিন্তু অসীম সেটের জন্য এই বাইজেকশনের সংজ্ঞাটিই "একই আকার"-এর একমাত্র অর্থ — কারণ অসীম সেটে সরাসরি "গুনে দেখা" সম্ভব নয়।

বিস্ময়কর একটি ফলাফল — $\mathbb{N} = \{0,1,2,\ldots\}$ ও $\mathbb{Z} = \{\ldots,-2,-1,0,1,2,\ldots\}$-এর কার্ডিনালিটি সমান, যদিও $\mathbb{Z}$ "দ্বিগুণ বড়" মনে হয়। এই দুটির মধ্যে একটি explicit বাইজেকশন আছে — একটি zigzag প্যাটার্ন:

$$f(n) = \begin{cases} n/2 & n \text{ জোড় হলে} \\ -(n+1)/2 & n \text{ বিজোড় হলে} \end{cases}$$

এই ফাংশন $0,1,2,3,4,5,\ldots$-কে পাঠায় $0,-1,1,-2,2,-3,\ldots$-এ — প্রতিটি পূর্ণসংখ্যা ঠিক একবার পাওয়া যায়, তাই এটি bijective। এই ধরনের সেটকে বলা হয় countably infinite (গণনাযোগ্য অসীম) — এদের কার্ডিনালিটিকে বলা হয় $\aleph_0$ (aleph-null)।

মূল পার্থক্য

সব অসীম সেট সমান "বড়" নয়! Cantor-এর বিখ্যাত diagonal argument (এখানে সম্পূর্ণ derive করা হচ্ছে না, শুধু ফলাফল বলা হচ্ছে) দেখায় যে $\mathbb{R}$ (real numbers) $\mathbb{N}$-এর সাথে কখনো বাইজেক্ট করা যায় না — অর্থাৎ $\mathbb{R}$ একটি strictly larger অসীম। স্বজ্ঞাগতভাবে — যেকোনো তালিকায় $\mathbb{N}$-এর সাথে real number মেলানোর চেষ্টা করলে, সবসময় এমন একটি real number বানানো যায় যা তালিকায় নেই (প্রতিটি সংখ্যার সাথে অন্তত এক জায়গায় ভিন্ন digit বসিয়ে) — তাই তালিকাটি কখনো সম্পূর্ণ হতে পারে না।

Python
def zigzag(n):
    return n // 2 if n % 2 == 0 else -(n + 1) // 2

pairs = [(n, zigzag(n)) for n in range(20)]
for n, z in pairs:
    print(f"f({n}) = {z}")

values = [z for _, z in pairs]
print("\nসবগুলো মান আলাদা (injective):", len(values) == len(set(values)))
print("পজিটিভ সংখ্যা আছে:", any(v > 0 for v in values))
print("নেগেটিভ সংখ্যা আছে:", any(v < 0 for v in values))
print("শূন্য আছে:", any(v == 0 for v in values))

    
প্রথম ২০টি প্রাকৃতিক সংখ্যার জন্য values-এ কোনো পুনরাবৃত্তি নেই (injective), এবং আউটপুটে ধনাত্মক, ঋণাত্মক ও শূন্য — তিন ধরনের মানই আছে, যা $\mathbb{Z}$-এর একটি প্রতিনিধিত্বমূলক নমুনা কভার করার ইঙ্গিত দেয়।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ একটি ফাংশন $f: A \to B$ কখনো injective হতে পারে না যদি $|A| > |B|$ (উভয়ে সসীম) — কেন?

এটি সরাসরি পিজনহোল প্রিন্সিপল-এর একটি প্রয়োগ (M3/L15-এ বিস্তারিত)। যদি $A$-এর $|A|$টি উপাদান $B$-এর মাত্র $|B| < |A|$টি "বাক্সে" পাঠাতে হয়, তাহলে গড় হিসাবে অন্তত একটি বাক্সে একাধিক উপাদান পড়তেই হবে — অর্থাৎ কোনো না কোনো দুটি ভিন্ন ইনপুট একই আউটপুট শেয়ার করবে, যা injective-এর সংজ্ঞা লঙ্ঘন করে। তাই $|A| > |B|$ হলে injective ফাংশন অসম্ভব।

প্র ০২ $\mathbb{N}$ ও $\mathbb{Z}$-এর কার্ডিনালিটি সমান বলাটা কি স্ববিরোধী মনে হয় না — $\mathbb{Z}$-তে তো "দ্বিগুণ" সংখ্যা আছে?

স্বজ্ঞাগতভাবে মনে হয় $\mathbb{Z}$ বড়, কারণ এতে সব ধনাত্মক সংখ্যার পাশাপাশি সব ঋণাত্মক সংখ্যাও আছে। কিন্তু অসীম সেটে "কতগুলো আছে" এই প্রশ্নের একমাত্র কঠোর উত্তর হলো বাইজেকশন — এবং zigzag ফাংশন প্রমাণ করে প্রতিটি পূর্ণসংখ্যার সাথে ঠিক একটি প্রাকৃতিক সংখ্যা জোড়া করা যায়, কোনো বাদ বা পুনরাবৃত্তি ছাড়া। "স্ববিরোধী মনে হওয়া" আসলে finite-set intuition-কে infinite set-এ ভুলভাবে প্রয়োগ করার ফল — অসীমের জগতে "অংশ" পুরোর "সমান বড়" হতে পারে (Hilbert's Hotel প্যারাডক্সের সাথে সম্পর্কিত একটি ক্লাসিক উদাহরণ)।

প্র ০৩ Cantor-এর diagonal argument-এর মূল ধারণাটি এক বাক্যে কীভাবে বোঝানো যায়?

ধরে নিন $\mathbb{N}$ ও $(0,1)$-এর মধ্যবর্তী real number-দের একটি সম্পূর্ণ তালিকা বানানো সম্ভব; তারপর প্রতিটি সংখ্যার $n$-তম দশমিক ডিজিট পরিবর্তন করে একটি নতুন সংখ্যা বানানো যায় যা তালিকার প্রতিটি সংখ্যা থেকেই অন্তত এক জায়গায় ভিন্ন — অর্থাৎ এই নতুন সংখ্যাটি তালিকায় থাকতেই পারে না, যদিও এটিও $(0,1)$-এর মধ্যে একটি বৈধ real number। এই স্ববিরোধিতা প্রমাণ করে "সম্পূর্ণ তালিকা" বানানোর প্রাথমিক ধারণাটিই ভুল ছিল।

অনুশীলন

  1. বিশ্লেষণ করুন: $f:\{1,2,3,4\}\to\{1,2,3,4\}$, $f(1)=2,f(2)=3,f(3)=4,f(4)=1$ — এটি injective, surjective, নাকি bijective? ব্যাখ্যা করুন।

    এটি bijective — প্রতিটি আউটপুট ($1,2,3,4$) ঠিক একবার আসে (কোনো পুনরাবৃত্তি নেই, তাই injective), এবং codomain-এর প্রতিটি উপাদান কভার হয়েছে (তাই surjective)। যেহেতু domain ও codomain একই সসীম সেট এবং ফাংশনটি injective, স্বয়ংক্রিয়ভাবে surjective-ও হতে হবে (পিজনহোল-এর একটি ফলাফল — সসীম সেট থেকে নিজের দিকে injective ফাংশন সবসময় surjective)।

  2. হাতে হিসাব করুন: zigzag ফাংশন $f$ ব্যবহার করে $f(20)$ থেকে $f(25)$ পর্যন্ত মান বের করুন, তারপর কোড সেলে range(20)-কে range(26) করে যাচাই করুন।

    $f(20)=10$ (জোড়), $f(21)=-11$ (বিজোড়), $f(22)=11$, $f(23)=-12$, $f(24)=12$, $f(25)=-13$ — প্যাটার্ন অব্যাহত থাকে, প্রতিটি নতুন $n$ আগের সব মান থেকে ভিন্ন একটি নতুন পূর্ণসংখ্যা তৈরি করে।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
পার্শিয়াল অর্ডার ও Hasse ডায়াগ্রাম