A particular approach to writing abstract specifications for programs, modules, or data types. Systems are modeled using representations for the data items involved, in terms of basic set-theory constructs such as sets, functions, relations, and sequences. The operations involved are then defined at this level of abstraction, typically by giving preconditions and postconditions for each operation. An implementation of the specification would involve replacing the set-theory constructs by lower-level ones, while preserving the meaning expressed by the specification. Although using abstract set theory, a constructive specification does give explicit constructions for the data and explicit definitions for the operations; it therefore contrasts with axiomatic specification, in which the representations are not prescribed. Widely used constructive specification formalisms are VDM and the specification language Z.