Equivalence Relation
সমতুল্যতা সম্পর্ক
Reflexive, symmetric আর transitive — তিনটাই। প্রতিটা equivalence relation set-কে partition করে, আর প্রতিটা partition একটা equivalence relation।
also: RST
স্মরণসূত্র: RST — Reflexive, Symmetric, Transitive।
উদাহরণ: =, a ≡ b (mod n), “একই connected component-এ”,
“একই git commit থেকে”।
মূল theorem: equivalence relation আর partition একই জিনিস।
[a] = { x : x ∼ a } a-এর equivalence class
mod 3 ℤ-কে তিনটা class-এ ভাগ করে — পরস্পর-বিচ্ছিন্ন, আর একসাথে পুরো ℤ ঢাকে।
কোডে এটা প্রতিদিন: == কে equivalence relation হতেই হবে,
নাহলে dict আর set ভেঙে পড়ে।
float('nan') == float('nan') # False — reflexive ভেঙেছে
এজন্যই NaN কে list.index() দিয়ে খুঁজে পাওয়া যায় না।
আর নিয়ম: a == b হলে hash(a) == hash(b) হতেই হবে। Java-তে
equals() override করে hashCode() না করা সবচেয়ে সাধারণ
bug-গুলোর একটা।
GROUP BY আক্ষরিকভাবে একটা equivalence relation দিয়ে partition করে।