The advantage of this mathematics is that it provides tools for formal reasoning about specifications. Specifications can then be examined for completeness and consistency. Specification languages can be classified by their semantic domains. ADT specification languages can be used to specify algebras. Process specification languages specify state sequences, event sequences, streams, partial orders, and state machines.
Programming languages provide an obvious example of languages with multiple models.
As explained in Section 4, predicate transformers provide one model. Functions provide another model, as explained in Section 5. The executable machine instructions that are generated by compiling a program provide a third model. Formal methods are useful in programming because programs can be viewed both as a set of commands for physical machines and as abstract mathematical objects as provided by these alternative models. In an operational method, a specification describes a system directly by providing a model of the system.