Full PLUSS implementation by the Asspegique system
The present volume is an annotated bibliography which attempts to provide an up-to-date overview of past and present work on algebraic specification. No attempt is made to provide a coherent introduction to the topic for beginners the intention is rather to provide a guide to the current literature for researchers in algebraic specification and neighbouring fields. Some indications of how the different approaches are related are included. ps Extract: Extended ML
The long-term goal of work on Extended ML is to provide a practical framework for formal development of Standard ML programs together with an integrated suite of computer-based specification and development support tools and complete mathematical foundations to substantiate claims of correctness. The complete formal definition of the Extended ML language  constitutes an important milestone in this programme, necessary to provide a basis for further research on foundations and tools. One of the key issues that had to be resolved was the design of a logic suitable for describing properties of Standard ML programs, taking into account features like recursive type and function definitions, exceptions, polymorphism, and non-termination. A number of errors in the Standard ML semantics  have been discovered in the course of this work . Work has begun on rules for proving theorems about EML specifications, to be used in verifying correctness conditions that arise in the course of formal development. Research has so far concentrated on equality reasoning  and quantifier rules.
The length and requisite formality of the definition of Extended ML renders it rather difficult to penetrate. Accordingly, [532, 534] provides an informal overview of the definition, explaining most of the main issues involved and justifying some of the choices taken.
Extract: Asspegique and Asspegique+
ASSPEGIQUE+ is an integrated environment for the development of large algebraic specifications and the management of a specification data base. The ASSPEGIQUE"1" specification environment supports the specification langage PLUSS [104, 93, 368]. The previous version of this environment, ASSPEGIQUE [100, 98] supported only the enrichment primitive, while ASSPEGIQUE+ [209, 819] also supports the renaming, parameterization and instanciation primitives. The tools available in the ASSPEGIQUE"1" specification environment include browsing tools, a specification editing tool, a specification modules integrator, symbolic evaluation tools and interfaces to other tools or environments. Most of these tools use CIGALE , a system for incremental grammar construction and parsing, which has been especially designed in order to cope with a flexible, user-oriented way of defining operators, with coercion and overloading of operators.
While the aim of the ASSPEGIQUE+ environment is to provide the user with a wide range of tools, this is achieved both through specific ASSPEGIQUE+ tools and through interfaces to tools built by other colleagues. Interfaces between ASSPEGIQUE and REVE  and SLOG  were first built, then a generic way to provide inter-operability between tools was designed [102, 211, 832]. The principles developed for designing a generic interfacing design between algebraic specification tools or environments comprise both issues concerning a common interchange format, and issues regarding interaction with the user, that is how to get and display information using the specification language known to the user. These ideas were used for developing interfaces with the proof checker LP , and, within the SALSA project , interfaces with environments for the algebraic specification languages LPG  and GLIDER.
The demand for reusability originates from economic considerations and attempts towards standardization. Rather than always starting from scratch, the use of existing components is cheaper and also less error-prone. A central problem for the identification and the correct use of reusable components is the abstract description of such components. A formal specification is the only form of description that can serve as a basis for a correctness proof; it can be processed automatically and it establishes a degree of confidence in the functionality of the component that is particularly important if a component has to be modified before being reused.
Goguen  proposes the algebraic specification language OBJ as well-suited for the design of reusable software systems. A component's interface is specified as an abstract data type and may be parameterized by other components. Combination of components is possible by instantiation using appropriate fitting morphisms. A similar approach is used in Extended ML , .
In ACT TWO  components are modules, which consist of two interface specifications, i.e. an export specification and an import specification, and a body specification which implements the export specification in terms of the import specification. Similarly, in LARCH , a component consists of a pair, an "abstract" interface specification and an implementation. Here the implementation is written in a conventional programming language. A similar distinction between a requirement and a design specification is made in PAnndA-S, the language of the PROSPECTRA project , based on the notion of visible and private interface in Ada. Ada bodies are generated semi-automatically by transformation.
In the approach of  a component consists of four parts at four different levels of abstraction: a requirement specification, a design specification, a source program and object code. Components are written in a so-called wide spectrum language which provides facilities for system design and software development at many levels of abstraction. Matsumoto uses Ada, which has as a consequence that the requirement specification is merely an informal description. CIP-L  and COLD  are two languages which include algebraic specifications as well as predicative and imperative language styles in one coherent framework and therefore are better suited for such an approach.
In the object-oriented approach of  a reusable component is represented by a graph of object-oriented programs, each node of which stands for one level of abstraction in the description of the software. In the approach of the ESPRIT-project DRAGON , a reusable component consists of a tree of algebraic specifications, where similarly to , each node of the tree is an instance of a certain level of an abstraction of the program with the root being the most "abstract" formal specification and the leaves representing the "concrete" implementations. A methodology for reusing components is described in .