Injective
একৈক
ভিন্ন input সবসময় ভিন্ন output দেয় — কোনো তথ্য হারায় না। `f(a₁) = f(a₂) ⟹ a₁ = a₂`। এই একটা ধর্মই hash collision আর compression-এর সীমা ব্যাখ্যা করে।
also: one-to-one, injection
Injective মানে output দেখে input পুনরুদ্ধার করা যায়।
Cardinality-র ভাষায়: injective সম্ভব কেবল যদি |A| ≤ |B|।
আর এখান থেকেই তিনটা অনিবার্য পরিণতি:
১. Hash collision অনিবার্য। h : {0,1}* → {0,1}²⁵⁶ — domain
অসীম, codomain সসীম। Injectivity অসম্ভব।
২. Lossless compression সব ফাইল ছোট করতে পারে না। Lossless
মানে injective। কিন্তু 2ⁿ টা n-bit ফাইলকে 2ⁿ − 1 টা ছোট
string-এ map করা যায় না। তাই কিছু ফাইল বড় হবেই।
head -c 1000000 /dev/urandom > r.bin && gzip -k r.bin && ls -l r.bin*
Random ডেটা gzip করলে বড় হয় — pigeonhole-এর সরাসরি প্রমাণ।
৩. Lossy codec ইচ্ছাকৃতভাবে non-injective। JPEG, MP3, H.264 — অনেক input একই output-এ, বিনিময়ে অনেক বেশি compression।
যেসব operation injective নয় (তাই উল্টানো যায় না):
lower(), round(), trim(), %, hash, lossy compression।
এগুলোর পর মূল ডেটা হারালে ফেরত পাবেন না।