The Object Constraint Language(OCL) is the constraint language of UML. It was developed at IBM and ObjecTime Limited and was added to the UML in 1997. Because it was initially designed to be an annotation language for UML class diagrams, it does not include a textual notation for declarations. Variants of OCL such as USE(http://www.db.informatik.uni-bremen.de/projects/USE/) overcome this limitation. OCL is based on first-order predicate logic but uses a syntax similar to programming languages and closely related to the syntax of UML. Alloy is similar to OCL, but the creators of Alloy claim that it has a more conventional syntax and simpler semantics. Alloy is fully declarative, whereas OCL allows mixing declarative and operational elements. The creators of Alloy argue (http://sdg.csail.mit.edu/pubs/1999/omg.pdf) that OCL is too implementation-oriented and therefore not well-suited for conceptual modelling though others (http://sdg.csail.mit.edu/pubs/1999/omg.pdf) believe that experience can help keep the specification process with OCL at an abstract level. Many tools are available supporting OCL such as Octopus(http://octopus.sourceforge.net/) and the Eclipse Model Development Tools(http://www.eclipse.org/modeling/mdt/?project=ocl). Typical features include the interpretation of OCL constraints over test cases and code generation. Some, such as the USE tool mentioned above, support design-time analysis and allow exhaustive search over a finite space of cases similar to Alloy.