42,360 research outputs found
Modularity and implementation of mathematical operational semantics
Structural operational semantics is a popular technique for specifying the meaning of programs by means of inductive clauses. One seeks syntactic restrictions on those clauses so that the resulting operational semantics is well-behaved. This approach is simple and concrete but it has some drawbacks. Turi pioneered a more abstract categorical treatment based upon the idea that operational semantics is essentially a distribution of syntax over behaviour. In this article we take Turi's approach in two new directions. Firstly, we show how to write operational semantics as modular components and how to combine such components to specify complete languages. Secondly, we show how the categorical nature of Turi's operational semantics makes it ideal for implementation in a functional programming language such as Haskell
Modularity and implementation of mathematical operational semantics
Structural operational semantics is a popular technique for specifying the meaning of programs by means of inductive clauses. One seeks syntactic restrictions on those clauses so that the resulting operational semantics is well-behaved. This approach is simple and concrete but it has some drawbacks. Turi pioneered a more abstract categorical treatment based upon the idea that operational semantics is essentially a distribution of syntax over behaviour. In this article we take Turi's approach in two new directions. Firstly, we show how to write operational semantics as modular components and how to combine such components to specify complete languages. Secondly, we show how the categorical nature of Turi's operational semantics makes it ideal for implementation in a functional programming language such as Haskell
An operational approach to semantics and translation for concurrent programming languages
The problems of semantics and translation for concurrent
programming languages are studied in this thesis.
A structural operational approach is introduced to specify the
semantics of parallelism and communication. Using this approach,
semantics for the concurrent programming languages CSP (Hoare's
Communicating Sequential Processes), multitasking and exception
handling in Ada, Brinch-Hansen's Edison and CCS (Milner's Calculus
of Communicating Systems) are defined and some of their properties
are studied.
An operational translation theory for concurrent programming
languages is given. The concept of the correctness of a translation
is formalised, the problem of composing transitions is studied and a
composition theorem is proved. A set of sufficient conditions for
proving the correctness of a translation is given.
A syntax-directed translation from CSP to CCS is given and proved
correct. Through this example the proof techniques of this approach
is demonstrated. Finally, as an application of operational semantics
and translation, a proposal for implementing multitasking in Ada is
given via a two-step syntax-directed translation
Bialgebraic foundations for the operational semantics of string diagrams
Turi and Plotkin's bialgebraic semantics is an abstract approach to specifying the operational semantics of a system, by means of a distributive law between its syntax (encoded as a monad) and its dynamics (an endofunctor). This setup is instrumental in showing that a semantic specification (a coalgebra) is compositional. In this work, we use the bialgebraic approach to derive well-behaved structural operational semantics of string diagrams, a graphical syntax that is increasingly used in the study of interacting systems across different disciplines. Our analysis relies on representing the two-dimensional operations underlying string diagrams in various categories as a monad, and their semantics as a distributive law for that monad. As a proof of concept, we provide bialgebraic semantics for a versatile string diagrammatic language which has been used to model both signal flow graphs (control theory) and Petri nets (concurrency theory)
A generic operational metatheory for algebraic effects
We provide a syntactic analysis of contextual preorder and equivalence for a polymorphic programming language with effects. Our approach applies uniformly across a range of algebraic effects, and incorporates, as instances: errors, input/output, global state, nondeterminism, probabilistic choice, and combinations thereof. Our approach is to extend Plotkin and Power’s structural operational semantics for algebraic effects (FoSSaCS 2001) with a primitive “basic preorder” on ground type computation trees. The basic preorder is used to derive notions of contextual preorder and equivalence on program terms. Under mild assumptions on this relation, we prove fundamental properties of contextual preorder (hence equivalence) including extensionality properties and a characterisation via applicative contexts, and we provide machinery for reasoning about polymorphism using relational parametricity
New Approach to Categorical Semantics for Procedural Languages
The semantics of programs written in some languages is concerned with the interpretation in various types of models. The purpose of structural operational semantics is to describe how a computation is performed. This method is one of the most popular semantic methods in the community of software engineers. It describes program behavior in the form of state changes caused by the execution of elementary steps. This feature predestinates the usage of the structural operational semantics for implementation of programming languages and also for verification purposes. Another semantic method, denotational semantics, defines changes of states by functions. In this paper a new approach to semantics is presented: behavior of programs, i.e., changes of states are modeled in the category of states. The morphisms category expresses elementary execution steps and the program execution is an oriented path in the category, i.e. composition of morphisms. Our categorical model is constructed for a simple procedural language that contains all basic van Dijkstra's constructs. We enriched our approach also with procedures forming a collection of categories interconnected by functors. This method enables the repeated call of procedures, nesting of procedure calls and recursive calls. Moreover, it allows to illustrate and accentuate dynamics of the program execution. The simplicity of this method does not exclude its mathematical exactness
Reasoning about modular datatypes with Mendler induction
In functional programming, datatypes a la carte provide a convenient modular
representation of recursive datatypes, based on their initial algebra
semantics. Unfortunately it is highly challenging to implement this technique
in proof assistants that are based on type theory, like Coq. The reason is that
it involves type definitions, such as those of type-level fixpoint operators,
that are not strictly positive. The known work-around of impredicative
encodings is problematic, insofar as it impedes conventional inductive
reasoning. Weak induction principles can be used instead, but they considerably
complicate proofs.
This paper proposes a novel and simpler technique to reason inductively about
impredicative encodings, based on Mendler-style induction. This technique
involves dispensing with dependent induction, ensuring that datatypes can be
lifted to predicates and relying on relational formulations. A case study on
proving subject reduction for structural operational semantics illustrates that
the approach enables modular proofs, and that these proofs are essentially
similar to conventional ones.Comment: In Proceedings FICS 2015, arXiv:1509.0282
- …