I. Introduction
Software systems rely on various rules to govern the interactions among their components. Such rules are often specified by the API developers and obeyed by the application developers. One important case in Object-Oriented languages such as Java
http://tinyurl.com/java-equals. All URLs verified on July 11, 2012
and C#http://tinyurl.com/csharp-equals
is the contract for the Object.equals () method, which requires that all objects satisfy the three properties of the equivalence relation (reflexivity, symmetry, and transitivity) in order to participate in collections such as List and Set. Breaking this contract often leads to unforeseen bugs that are hard to diagnose even for an experienced developer [4][21][23][26][10]. Indeed, the correct implementation of equality is probably a concern for all programmers. For example, 622 classes in JDK 1.5 override Object.equals (), covering such diverse areas as networking, security, CORBA, RMI, and utilities.