Peter Mosses

Peter Mosses
Delft University of Technology | TU · Department of Software and Computer Technology

BSc, MA, MSc, DPhil

About

175
Publications
8,725
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
2,907
Citations
Additional affiliations
April 2016 - August 2019
Delft University of Technology
Position
  • Visitor
January 2016 - present
Swansea University
Position
  • Professor Emeritus
January 2005 - December 2015
Swansea University
Position
  • Professor (Full)

Publications

Publications (175)
Chapter
When a new programming language appears, the syntax and intended behaviour of its programs need to be specified. The behaviour of each language construct can be concisely specified by translating it to fundamental constructs (funcons), compositionally. In contrast to the informal explanations commonly found in reference manuals, such formal specifi...
Preprint
Full-text available
Specifying the semantics of a programming language formally can have many benefits. However, it can also require a huge effort. The effort can be significantly reduced by translating language syntax to so-called fundamental constructs (funcons). A translation to funcons is easy to update when the language evolves, and it exposes relationships betwe...
Article
The potential benefits of formal semantics are well known. However, a substantial amount of work is required to produce a complete and accurate formal semantics for a major language; and when the language evolves, large-scale revision of the semantics may be needed to reflect the changes. The investment of effort needed to produce an initial defini...
Article
CoFI is the acronym of the Common Framework Initiative for Algebraic Specification and Development, which started in 1995. CoFI designed Casl, the Common Algebraic Specification Language. This article first summarises the origins of CoFI and the motivation for Casl. It then recalls some of the crucial contributions to CoFI made by Don Sannella, and...
Conference Paper
The programming and modelling languages currently used in software engineering generally have plenty of tool support. But although their syntax is specified using formal grammars or meta-models, complete formal semantic specifications are seldom provided. The difficulty of reuse of parts of semantic specifications, and of co-evolution of such speci...
Article
Full-text available
It has been an open question as to whether the Modular Structural Operational Semantics framework can express the dynamic semantics of call/cc. This paper shows that it can, and furthermore, demonstrates that it can express the more general delimited control operators control and shift.
Article
Structural operational semantic specifications come in different styles: small-step and big-step. A problem with the big-step style is that specifying divergence and abrupt termination gives rise to annoying duplication. We present a novel approach to representing divergence and abrupt termination in big-step semantics using status flags. This avoi...
Conference Paper
The developers of a programming language need to document its intended syntax and semantics, and to update the documentation when the language evolves. They use formal grammars to define context-free syntax, but usually give only an informal description of semantics. Use of formal semantics could greatly increase the consistency and completeness of...
Conference Paper
Full-text available
It has been an open question as to whether the Modular Structural Operational Semantics framework can express the dynamic semantics of call/cc. This paper shows that it can, and furthermore, demonstrates that it can express the more general delimited control operators control and shift.
Chapter
MSOS is a variant of structural operational semantics with a natural representation of unobservable transitions. To prove various desirable laws for programming constructs specified in MSOS, bisimulation should disregard unobservable transitions, and it should be a congruence. One approach, following Van Glabbeek, is to add abstraction rules and us...
Article
Full-text available
Semantic specifications of programming languages typically have poor modularity. This hinders reuse of parts of the semantics of one language when specifying a different language – even when the two languages have many constructs in common – and evolution of a language may require major reformulation of its semantics. Such drawbacks have discourage...
Conference Paper
Full-text available
Dealing with polymorphism in the presence of imperative features is a long-standing open problem for Hindley-Milner type systems. A widely adopted approach is the value restriction, which inhibits polymorphic generalisation and unfairly rejects various programs that cannot go wrong. We consider abstract interpretation as a tool for constructing saf...
Article
A semantic specification of a programming language can be relevant for programmers to understand software written in the language, as well as for the implementers of a language to understand the intentions of its designers. In the early 1980s, Jan Heering and Paul Klint envisioned complete language specifications as libraries of reusable individual...
Conference Paper
Modular Structural Operational Semantics (MSOS) is a variant of Structural Operational Semantics (SOS). It allows language constructs to be specified independently, such that no reformulation of existing rules in an MSOS specification is required when a language is extended with new constructs and features. Introducing the Prolog MSOS Tool, we reca...
Conference Paper
Full-text available
Semantic specifications of programming languages typically have poor modularity. This hinders reuse of parts of the semantics of one language when specifying a different language -- even when the two languages have many constructs in common -- and evolution of a language may require major reformulation of its semantics. Such drawbacks have discoura...
Conference Paper
Full-text available
Semantic specifications of programming languages typically have poor modularity. This hinders reuse of parts of the semantics of one language when specifying a different language -- even when the two languages have many constructs in common -- and evolution of a language may require major reformulation of its semantics. Such drawbacks have discoura...
Conference Paper
Big-step semantics for languages with abrupt termination and/or divergence suffer from a serious duplication problem, addressed by the novel ‘pretty-big-step’ style presented by Charguéraud at ESOP’13. Such rules are less concise than corresponding small-step rules, but they have the same advantages as big-step rules for program correctness proofs....
Conference Paper
Modularity has been recognised as a problematic issue of programming language semantics, and various semantic frameworks have been designed with it in mind. Reusability is another desirable feature which, although not the same as modularity, can be enabled by it. The K Framework, based on Rewriting Logic, has good modularity support, but reuse of s...
Conference Paper
Transition rules with negative premises are needed in the structural operational semantics of programming and specification constructs such as priority and interrupt, as well as in timed extensions of specification languages. The well-known proof-theoretic semantics for transition system specifications involving such rules is based on well-supporte...
Conference Paper
For structural operational semantics (SOS) of process algebras, various notions of bisimulation have been studied, together with rule formats ensuring that bisimilarity is a congruence. For programming languages, however, SOS generally involves auxiliary entities (e.g. stores) and computed values, and the standard bisimulation and rule formats are...
Article
Full-text available
The Vienna Development Method (VDM) was developed in the early 1970s as a variant of denotational semantics. VDM descriptions of programming languages differ from the original Scott–Strachey style by making extensive use of combinators which have a fixed operational interpretation. After recalling the main features of denotational semantics and the...
Article
Full-text available
Sound behavioral equations on open terms may become unsound after conservative exten-sions of the underlying operational semantics. Providing criteria under which such equations are preserved is extremely useful; in particular, it can avoid the need to repeat proofs when extending the specified language. This paper investigates preservation of soun...
Conference Paper
Full-text available
Sound behavioral equations on open terms may become unsound after conservative extensions of the underlying operational semantics. Providing criteria under which such equations are preserved is extremely useful; in particular, it can avoid the need to repeat proofs when extending the specified language. This paper investigates preservation of sound...
Article
Since the middle of the twentieth century, hundreds of programming languages have been designed and implemented – and new ones are continually emerging. The syntax of a programming language can usually be described quite precisely and efficiently using formal grammars. However, the formal description of its semantics is much more challenging. Langu...
Article
Full-text available
We have developed novel techniques for component-based specification of programming languages. In our approach, the semantics of each fundamental programming construct is specified independently, using an inherently modular framework such that no reformulation is needed when constructs are combined. A language specification consists of an unrestric...
Chapter
Since the middle of the twentieth century, hundreds of programming languages have been designed and implemented – and new ones are continually emerging. The syntax of a programming language can usually be described quite precisely and efficiently using formal grammars. However, the formal description of its semantics is much more challenging. Langu...
Article
Full-text available
In contrast to a transition system specification in process algebra, a structural operational semantics (SOS) of a programming language usually involves auxiliary entities: stores, environments, etc. When specifying SOS rules, particular auxiliary entities often need to be propagated unchanged between premises and conclusions. The standard techniqu...
Article
Formal semantic descriptions have many potential pragmatic advantages over informal descriptions. Unfortunately, however, the major frameworks for formal semantics do not support component-based description of programming languages. Different languages often have many constructs in common, but the corresponding parts of their semantic descriptions...
Conference Paper
Full-text available
Research in formal description of programming languages over the past four decades has led to some significant achievements. These include formal syntax and semantics for complete major programming languages, and theoretical foundations for novel features that might be included in future languages. Nevertheless, to give a completely formal, validat...
Chapter
Although VDM semantic descriptions of programming language are denotational, they can be read quite operationally. After recalling the main features of denotational semantics, this paper examines the combinators of the VDM specification language, and relates them to the use of monads in the monadic style of denotational semantics. It also provides...
Article
Full-text available
Most undergraduate courses on formal semantics are based on conventional Structural Operational Semantics (SOS) and/or Denotational Semantics. Typically, they give semantic descriptions of a series of small programming languages, starting from a very simple one, and subsequently extending it with various new features. For each extension, however, i...
Article
Some basic programming constructs (e.g., conditional statements) are found in many different programming languages, and can often be included without change when a new language is designed. When writing a semantic description of a language, however, it is usually not possible to reuse parts of previous descriptions without change.This paper introdu...
Chapter
Full-text available
An open collaborative effort has been initiated: to design a common framework for algebraic specification and development of software. The rationale behind this initiative is that the lack of such a common framework greatly hinders the dissemination and application of research results in algebraic specification. In particular, the proliferation of...
Chapter
The recently-developed framework of Unified Algebras is intended for axiomatic specification of abstract data types. In contrast, the somewhat older framework of Action Semantics (earlier known as Abstract Semantic Algebras) is for denotational specification of programming languages. This paper gives an introduction to the main features of Unified...
Article
Full-text available
These notes give an overview of the main frameworks that have been developed for specifying the formal semantics of programming languages. Some of the pragmatic aspects of semantic descriptions are discussed, including modularity, and potential applicability to visual and modelling languages. References to the literature provide starting points for...
Conference Paper
Goguen and Malcolm specify semantics of programming languages in OBJ. Here, we consider how the extensibility and reusability of their specifications could be improved. We propose using the notation and modular structure of the Constructive Action Semantics framework in OBJ, and give a simple illustration. The reader is assumed to be familiar with...
Article
Full-text available
Usually, the majority of language constructs found in a programming language can also be found in many other languages, because language design is based on reuse. This should be reflected in the way we give semantics to programming languages. It can be achieved by making a language description consist of a collection of modules, each defining a sin...
Article
Full-text available
Most approaches to formal semantics are based on the assumption that all the constructs of a language are defined together. The details of the definition of each construct can (and usually do) depend on which other constructs are included in the given language. This limits reuse of definitions of common constructs. With the more constructive approa...
Article
Full-text available
Some basic programming constructs (e.g., conditional statements) are found in many different programming languages, and can often be included without change when a new language is designed. When writing a semantic description of a language, however, it is usually not possible to reuse parts of previous descriptions without change. This paper intro...
Article
Full-text available
Some basic programming constructs (e.g., conditional statements) are found in many different programming languages, and can often be included without change when a new language is designed. When writing a semantic description of a language, however, it is usually not possible to reuse parts of previous descriptions without change.This paper introdu...
Conference Paper
Formal semantic descriptions of full-scale programming languages can be notoriously difficult to write, as well as to read. Writing a description of a language usually starts from scratch: reuse from previous language descriptions requires first locating a relevant one, then manually copying bits of it – perhaps with extensive reformulation. Semant...
Article
Modular SOS (MSOS) is a variant of conventional Structural Operational Semantics (SOS). Using MSOS, the transition rules for each construct of a programming language can be given incrementally, once and for all, and do not need reformulation when further constructs are added to the language. MSOS thus provides an exceptionally high degree of modula...
Article
Full-text available
Structural Operational Semantics (SOS) allows transitions to be labelled. This is fully exploited in SOS descriptions of concurrent systems, but usually not at all in conventional descriptions of sequential programming languages. This paper shows how the use of labels can provide significantly simpler and more modular descriptions of programming l...
Article
Full-text available
When writing semantic descriptions of programming languages it is highly desirable to reuse descriptions of constructs from previous language descriptions. This is usually not possible without adaptations, due to the lacking modularity of the formalism used. In [3] Doh and Mosses proposed organizing
Article
This part of the Casl Reference Manual gives a detailed summary of the syntax and intended semantics of Casl. Readers are assumed to be already familiar with the main concepts of algebraic specifications.
Article
Partial functions arise naturally. Partial functions arise in a number of situations. Casl provides means for the declaration of partial functions, the specification of their domains of definition, and more generally the specification of system properties involving partial functions. The aim of this chapter is to discuss and illustrate how to hand...
Article
This paper concerns the problem of building reactive systems in a modular way. Several institutions have been proposed for the specification of reactive systems throughout the last fifteen years. Based on the institutions, formalisms for the incremental construction of system specifications have been developed. Related problem of modular constructi...
Article
Libraries are named collections of named specifications. In the foregoing chapters, we have seen many examples of named specifications, and of references to them in later specifications. This chapter explains how a collection of named specifications can itself be named, as a library. The creation of libraries facilitates the reuse of specification...
Article
This appendix provides an overview of the (concrete) syntax of each part of Casl.
Article
This part of the Casl Reference Manual defines the formal semantics of the language Casl, as informally presented in the Casl Summary (Part I). Apart from this Introduction, which is partly devoted to defining some basic notation and explaining the style of the semantics, the structure of this document is deliberately almost identical to the struct...
Article
Large and complex specifications are easily built out of simpler ones by means of (a small number of) specification-building operations. In the previous chapters, we have focused attention on basic specifications and detailed how to use the various constructs of Casl to write meaningful, but relatively simple, specifications. The aim of this chapt...
Article
Casl is based on standard concepts of algebraic specification. This chapter reviews the main concepts of algebraic specification. It briefly explains and illustrates standard terminology regarding specification language constructs and models of specifications (i.e., algebras), and indicates the differences between basic, structured, and architectu...
Article
Subsorts and supersorts are often useful in Casl specifications. Many examples naturally involve subsorts and supersorts. Casl provides means for the declaration of a sort as a subsort of another one when the values of the subsort are regarded a special case of those in the other sort. The aim of this chapter is to discuss and illustrate how to ha...
Article
B.1 Introduction B.2 Underlying Concepts B.3 Getting Started B.4 Partial Functions B.5 Subsorting B.6 Structuring Specifications B.7 Generic Specifications B.8 Specifying the Architecture of Implementations B.9 Libraries B.10 Foundations B.11 Tools B.12 Basic Libraries
Article
In this chapter we illustrate the use of Casl on a fairly large and complex case study, the steam-boiler control system. This case study is particularly interesting since it has been used several times as a competition problem, and many other specification frameworks have been illustrated with it, see [1]. Here we describe how to derive a Casl spec...
Article
For completeness, the text describing the steam-boiler control system case study, as originally provided by Jean-Raymond Abrial, is reproduced here (except for the ”Additional Information” section, see [1, pp. 507-509]).
Article
Making a specification generic (when appropriate) improves its reusability. As mentioned in the previous chapter, naming specifications is a good idea. In many cases, however, datatypes are naturally generic, having sorts, operations, and/or predicates that are deliberately left loosely specified, to be determined when the datatype is used. For ins...
Article
Architectural specifications impose structure on implementations, whereas specification-building operations only structure the text of specifications. As explained in the previous chapters, the specification of a complex system may be fairly large and should be structured into coherent, easy to grasp, pieces. Casl provides a number of specificatio...
Chapter
This chapter first explains the background and aims of CoFI, the Common Framework Initiative for algebraic specification and development of software. It then gives an overview of the main features of Casl, the Common Algebraic Specification Language.
Chapter
Simple specifications may be written in Casl essentially as in many other algebraic specification languages. The simplest kind of algebraic specification is when each specified operation is to be interpreted as an ordinary total mathematical function: it takes values of particular types as arguments, and always returns a well-defined value. Total f...
Chapter
This part of the Casl Reference Manual is concerned with syntax. It makes the usual distinction between concrete syntax and abstract syntax: the former deals with the representation of specifications as sequences of characters, and with how these sequences can be grouped to form specifications, whereas the latter reflects only the compositional str...
Article
Full-text available
Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 5.1 Normal Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.1.1 Basic Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.1.2 Basic Specifications with Subsorts . . . . . . . ....
Article
Full-text available
This article demonstrates a method for composing a programming language by combining action-semantics modules. Each module is defined separately, and then a programming-language module is defined by combining existing modules. This method enables the language designer to gradually develop a language by defining, selecting and combining suitable mod...
Article
Full-text available
Modular SOS (MSOS) is a simple variant of conventional Structural Operational Semantics (SOS). Using MSOS, the transition rules for each construct of a programming language can be given defini-tively, once and for all, and never need reformulation when further con-structs are added to the language. MSOS thus provides an exceptionally high degree of...
Conference Paper
Full-text available
Modular SOS (MSOS) is a framework created to improve the modularity of structural operational semantics specifications, a formalism frequently used in the fields of programming languages semantics and process algebras. With the objective of defining formal tools to support the execution and verification of MSOS specifications, we have defined a map...
Conference Paper
Full-text available
Modular SOS is a recently-developed variant of Plotkin’s Structural Operational Semantics (SOS) framework. It has severalpra gmatic advantages over the originalfram ework—the most significant being that rules specifying the semantics of individual language constructs can be given definitively, once and for all. Modular SOS is being used for teachin...
Article
Full-text available
Modularity and tool support are crucial features for practical use of formal descriptions of programming languages. The combination of unrestricted context-free grammars with action semantics allows complete language descriptions with exceptionally good modularity. Moreover, by specifying the descriptions in ASF+SDF, the ASF+SDF Meta-Environment ca...
Article
Full-text available
covering the ASD abstract syntax notation; and (2) an ASF-SDF module called CONCRETE containing the concrete notation, as well as a function (signature and defining equations) mapping the CON- CRETE representation to the ABSTRACT one.
Conference Paper
Formal descriptions of syntax are quite popular: regular and context-free grammars have become accepted as useful for documenting the syntax of programming languages, as well as for generating efficient parsers; attribute grammars allow parsing to be linked with typechecking and code generation; and regular expressions are extensively used for sear...
Article
This chapter focuses on common algebraic specification language (CASL) and explaining how its language constructs relate to those of CafeOBJ. CASL is an expressive language for the algebraic specification of software requirements, design, and architecture. It has been developed by an open collaborative effort called Common Framework Initiative for...
Article
Full-text available
A meta-language for semantics has a high degree of modularity when descriptions of individual language constructs can be formulated independently using it, and do not require reformulation when new constructs are added to the described language. The quest for modularity in semantic meta-languages has been going on for more than two decades. Here, m...
Conference Paper
Action semantics (AS) is a framework for specifying the semantics of programming languages, in a very modular and readable way. Recently, the operational semantics of action notation (action semantics’s specification language) has been rewritten using Modular SOS (MSOS), a new modular approach for specifying operational semantics. The new modular s...
Article
Full-text available
This paper forms the substance of a course of lectures given at the International Summer School in Computer Programming at Copenhagen in August, 1967. The lectures were originally given from notes and the paper was written after the course was finished. ...
Conference Paper
Formal descriptions of syntax are quite popular: regular and context-free grammars have become accepted as useful for documenting the syntax of programming languages, as well as for generating efficient parsers; attribute grammars allow parsing to be linked with type-checking and code generation; and regular expressions are extensively used for sea...
Article
Full-text available
Article
Full-text available
Semantic Algebras #Mos82#, is to allow descriptions of realistic programming languages. It uses the Action Notation to specify elementary actions and techniques for combining them. Actions are objects which when performed process information and are used to represent semantics of programs. Actions can be combined using the action combinators to der...
Conference Paper
Full-text available
A novel form of labeled transition system is proposed, where the labels are the arrows of a category, and adjacent labels in computations are required to be composable. Such transition systems provide the foundations for modular SOS descriptions of programming languages. Three fundamental ways of transforming label categories, analogous to monad tr...
Article
The Common Algebraic Specification Language (CASL) is an expressive language for the formal specification of functional requirements and modular design of software. It has been designed by COFI, the international Common Framework Initiative for algebraic specification and development. It is based on a critical selection of features that have alread...
Article
Full-text available
Modularity is an important pragmatic aspect of semantic descriptions. In denotational semantics, the issue of modularity has received much attention, and appropriate abstractions have been introduced, so that definitions of semantic functions may be independent of the details of how computations are modeled. In structural operational semantics (S...
Article
Full-text available
Modularity is an important pragmatic aspect of semantic descriptions: good modularity is needed to allow the reuse of existing descriptions when extending or changing the described language. In denotational semantics, the issue of modularity has received much attention, and appropriate abstractions have been introduced, so that definitions of seman...
Article
Syntax ............................ Action semantics is a recently-developed framework for formal semantics [12, 14] It combines formality with many good pragmatic features. Regarding comprehen- sibility and accessibility, for instance, action semantic descriptionscompete with informal language descriptions. Action semantic descriptions scale up sm...
Conference Paper
Casl is an expressive language for the specification of functional requirements and modular design of software. It has been designed by CoFI, the international Common Framework Initiative for algebraic specification and development. It is based on a critical selection of features that have already been explored in various contexts, including subsor...
Conference Paper
Full-text available
Various logic-based frameworks have been proposed for spe- cifying the operational semantics of programming languages and con- current systems, including inference systems in the styles advocated by Plotkin and by Kahn, Horn logic, equational specifications, reduction systems for evaluation contexts, rewriting logic, and tile logic. We consider the...
Article
Reproduction of all or part of this work is permitted for educational or research use on condition that this copyright notice is included in any copy. See back inner page for a list of recent BRICS Notes Series publications. Copies may be obtained by contacting: BRICS

Network

Cited By

Projects

Projects (2)
Project
CBS aims to optimise reuse and co-evolution in formal specifications of programming languages, and to encourage language developers to exploit formal semantics for documenting design decisions. It provides a library of fixed reusable components of language specifications, and tools to support development and validation.