同値関係

先週の授業で「同値関係」の話が出たのだけど、なんか授業以外で聞いたことある気がする。 同値関係の定義は以下。

ある集合 S において、二項関係 ∼ が次の性質を満たすとき、∼ は S同値関係であるという。

  • 反射律: aa.
  • 対称律: abba.
  • 推移律: ab かつ bcac.

上の 3 項をまとめて同値律という。

どこで聞いたのかと思ったら Effective Java プログラミング言語ガイドequals をオーバーライドする時は一般契約に従う という話っぽい。 内容は Object.equals メソッドをオーバーライドするなら上の同値関係を守るように実装しましょう的なもの。 ちゃんと 反射・対象・推移 って言葉も出てる。 こういうのがきちっと書かれているとちょっとうれしかったりする。