TL;DR: In this paper, the basic concepts for the theory of algebraic specifications are reviewed, and four other semantic concepts and algebras for specifying nondeterminism and concurrency are presented.
Abstract: Publisher Summary
An algebraic specification is a description of one or more abstract data types. There are three main semantic approaches to algebraic specifications: (1) the initial algebra approach, (2) the terminal algebra approach, and (3) the loose approach. A fourth approach that is mainly of theoretical interest uses iso-initial algebras. This chapter reviews the basic concepts for the theory of algebraic specifications. It also describes the notion of an abstract data type and discusses its basic properties. The chapter also describes four other semantic concepts and algebras for specifying nondeterminism and concurrency. The chapter discusses the existence of initial and terminal algebras, the lattice structure of the models, and the expressive power of initial and terminal algebra specifications. The chapter also presents two additional concepts for algebraic specifications, which are both practically and theoretically essential: (1) hidden symbols and (2) constructors. The chapter also presents a general approach to structured specifications.
TL;DR: This work shows how to prove (and disprove) theorems in the initial algebra of an equational variety by a simple extension of the Knuth-Bendix completion algorithm, and applications to proofs of programs computing over data structures, and to algebraic summation identities.
TL;DR: This work shows how to prove (and disprove) theorems in the initial algebra of an equational variety by a simple extension of the Knuth-Bendix completion algorithm, and applications to proofs of programs computing over data structures, and to algebraic summation identities.
Abstract: We show how to prove (and disprove) theorems in the initial algebra of an equational variety by a simple extension of the Knuth-Bendix completion algorithm. This allows us to prove by purely equational reasoning theorems whose proof usually requires induction. We show applications of this method to proofs of programs computing over data structures, and to proofs of algebraic summation identities. This work extends and simplifies recent results of Musser15 and Goguen6.
TL;DR: The application field of coalgebras is extended, providing a new instance of the principle "process semantics via coinduction" of bisimilarity, namely coinductions in a Kleisli category.
Abstract: Trace semantics has been defined for various kinds of state-based systems, notably with different forms of branching such as non-determinism vs probability In this paper we claim to identify one underlying mathematical structure behind these "trace semantics," namely coinduction in a Kleisli category This claim is based on our technical result that, under a suitably order-enriched setting, a final coalgebra in a Kleisli category is given by an initial algebra in the category Sets Formerly the theory of coalgebras has been employed mostly in Sets where coinduction yields a finer process semantics of bisimilarity Therefore this paper extends the application field of coalgebras, providing a new instance of the principle "process semantics via coinduction"
TL;DR: This family of tagless interpretations for a higher-order typed object language in a typed metalanguage (Haskell or ML) that require no dependent types, generalized algebraic data types, or postprocessing to eliminate tags demonstrates again that it is useful to abstract over higher-kinded types.
Abstract: We have built the first family of tagless interpretations for a higher-order typed object language in a typed metalanguage (Haskell or ML) that require no dependent types, generalized algebraic data types, or postprocessing to eliminate tags. The statically type-preserving interpretations include an evaluator, a compiler (or staged evaluator), a partial evaluator, and call-by-name and call-by-value continuation-passing style (CPS) transformers. Our principal technique is to encode de Bruijn or higher-order abstract syntax using combinator functions rather than data constructors. In other words, we represent object terms not in an initial algebra but using the coalgebraic structure of the λ-calculus. Our representation also simulates inductive maps from types to types, which are required for typed partial evaluation and CPS transformations. Our encoding of an object term abstracts uniformly over the family of ways to interpret it, yet statically assures that the interpreters never get stuck. This family of interpreters thus demonstrates again that it is useful to abstract over higher-kinded types.