Alloy (specification language)

From Wikipedia, the free encyclopedia
Jump to: navigation, search

In computer science and software engineering, Alloy is a declarative specification language for expressing complex structural constraints and behavior in a software system. Alloy provides a simple structural modeling tool based on first-order logic. The mathematical underpinnings of the language were heavily influenced by the Z notation, although the syntax of Alloy owes more to languages such as Object Constraint Language.[1] Alloy is targeted at the creation of micro-models that can then be automatically checked for correctness. Alloy specifications can be checked using the Alloy Analyzer.

The first version of the Alloy language appeared in 1997. It was a rather limited object modeling language. Succeeding iterations of the language "added quantifiers, higher arity relations, polymorphism, subtyping, and signatures".[2] Although Alloy is designed with automatic analysis in mind, Alloy differs from many specification languages designed for model-checking in that it permits the definition of infinite models. The Alloy Analyzer is designed to perform finite scope checks even on infinite models.

Model structure[edit]

Alloy models are relational in nature, and are composed of several different kinds of statements:[1]

  • Signatures define the vocabulary of a model by creating new sets
sig Object{} defines a signature Object
sig List{ head : lone Node } defines a signature List that contains a field head of type Node and multiplicity lone - this establishes the existence of a relation between Lists and Nodes such that every List is associated with no more than one head Node
  • Facts are constraints that are assumed to always hold
  • Predicates are parameterized constraints, and can be used to represent operations
  • Functions are expressions that return results
  • Assertions are assumptions about the model that can be checked using the Alloy Analyzer

Because Alloy is a declarative language the meaning of a model is unaffected by the order of statements.


  1. ^ a b Jackson, Daniel (2006). Software Abstractions: Logic, Language, and Analysis. MIT Press. ISBN 978-0-262-10114-1. 
  2. ^ "Alloy FAQ". Archived from the original on 7 June 2007. Retrieved 2013-03-07. 

External links[edit]