Foundationপ্রথম নীতি থেকে
LEVEL 0 · Mathematical Foundations

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। এগুলোর পর মূল ডেটা হারালে ফেরত পাবেন না।