16 research outputs found
Semantic Domains and Denotational Semantics
The theory of domains was established in order to have appropriate spaces on which to define semantic functions for the denotational approach to programming-language semantics. There were two needs: first, there had to be spaces of several different types available to mirror both the type distinctions in the languages and also to allow for different kinds of semantical constructs - especially in dealing with languages with side effects; and second, the theory had to account for computability properties of functions - if the theory was going to be realistic. The first need is complicated by the fact that types can be both compound (or made up from other types) and recursive (or self-referential), and that a high-level language of types and a suitable semantics of types is required to explain what is going on. The second need is complicated by these complications of the semantical definitions and the fact that it has to be checked that the level of abstraction reached still allows a precise definition of computability
Data Abstraction and General Recursion
Existing approaches to semantics of algebraically specified data types such as Initial Algebra Semantics and Final Algebra Semantics do not take into account the possibility of general recursion and hence non-termination in the ambient programming language. Any technical development of this problem needs to be in the setting of domain theory. In this paper we present extensions of initial and final algebra semantics to algebras with an underlying domain structure. Four possibilities for specification methodologies arise: two each in the Initial and Final algebra paradigms. We demonstrate that the initial/final objects (as appropriate) exist in all four situations. The final part of the paper attempts to explicate the notion of abstractness of ADT\u27s by defining a notion of operational semantics for ADT\u27s, and then studying the relationship between the various algebraic-semantics proposed and the operational semantics
Effective solutions of recursive domain equations
Solving recursive domain equations is one of the main concerns in the denotational semantics of programming languages, and in the algebraic specification of data types. Because we are to solve them for the specification of computable objects, effective solutions of them should be needed. Though general methods for obtaining solutions are well known, effectiveness of the solutions has not been explicitly investigated.* The main objective of this dissertation is to provide a categorical method for obtaining effective solutions of recursive domain equations. Thence we will provide effective models of denotational semantics and algebraic data types. The importance of considering the effectiveness of solutions is two-fold. First we can guarantee that for every denotational specification of a programming language and algebraic data type specification, implementation exists. Second, we have an instance of a computability theory where higher type computability and even infinite type computability can be discussed very smoothly.
*While this dissertation has been written, Plotkin and Smyth obtained an alternative to our method which worked only for effectively given categories with universal objects
Techniques for Modelling Structured Operational and Denotational Semantics Definitions with Term Rewriting Systems
A fundamental requirement for the application of automatic proof support for program verification is that the semantics of programs be appropriately formalized using the object language underlying the proof tool. This means that the semantics definition must not only be stated as syntactically correct input for the proof tool to be used, but also in such a way that the desired proofs can be performed without too many artificial complications. And it must be clear, of course, that the translation from mathematical metalanguage into the object language is correct. The objective of this work is to present methods for the formalization of structured operational and denotational semantics definitions that meet these requirements. It combines techniques known from implementation of the -calculus with a new way to control term rewriting on object level, thus reaching a conceptually simple representation based on unconditional rewriting. This deduction formalism is available within many of the existent proof tools, and therefore application of the representation methods is not restricted to a particular tool. Correctness of the representations is achieved by proving that the non-trivial formalizations yield results that are equivalent to the meta-level definitions in a strong sense. Since the representation algorithms have been implemented in form of executable programs, there is no need to carry out tedious coding schemes by hand. Semantics definitions can be stated in a format very close to the usual meta language format, and they can be transformed automatically into an object-level representation that is accessible to proof tools. The formalizations of the two semantics definition styles are designed in a consistent way, both making use of the same modelling of the underlying mathematical basis. Therefore, they can be used simultaneously in proofs. This is demonstrated in a larger example, where an operational and a denotational semantics definition for a programming language are proved to be equivalent using the Larch Prover. This proof has been carried out by hand before, and so the characteristics of the automated proof can be made quite clear
Abstract interpretation and optimising transformations for applicative programs
This thesis describes methods for transforming applicative
programs with the aim of improving their efficiency. The general
justification for these techniques is presented via the concept of
abstract interpretation. The work can be seen as providing
mechanisms to optimise applicative programs for sequential von
Neumann machines. The chapters address the following subjects.
Chapter 1 gives an overview and gentle introduction to the
following technical chapters.
Chapter 2 gives an introduction to and motivation for the
concept of abstract interpretation necessary for the detailed
understanding of the rest of the work. It includes certain
theoretical developments, of which I believe the most important is
the incorporation of the concept of partial functions into our
notion of abstract interpretation. This is done by associating
non-standard denotations with functions just as denotational
semantics gives the standard denotations.
Chapter 3 gives an example of the ease with which we can talk
about function objects within abstract interpretive schemes. It
uses this to show how a simple language using call-by-need
semantics can be augmented with a system that annotates places in a
program at which call-by-value can be used without violating the
call-by-need semantics.
Chapter 4 extends the work of chapter 3 by showing that under
some sequentiality restriction, the incorporation of call-by-value
for call-by-need can be made complete in the sense that the
resulting program will only possess strict functions except for the
conditional.
Chapter 5 is an attempt to apply the concepts of abstract
interpretation to a completely different problem, that of
incorporating destructive operators into an applicative program.
We do this in order to increase the efficiency of implementation
without violating the applicative semantics by introducing
destructive operators into our language.
Finally, chapter 6 contains a discussion of the implications of
such techniques for real languages, and in particular presents
arguments whereby applicative languages should be seen as whole
systems and not merely the applicative subset of some larger
language
Calculi for higher order communicating systems
This thesis develops two Calculi for Higher Order Communicating Systems. Both calculi consider sending and receiving processes to be as fundamental as nondeterminism and parallel composition.
The first calculus called CHOCS is an extension of Milner's CCS in the sense that all the constructions of CCS are included or may be derived from more fundamental constructs. Most of the mathematical framework of CCS carries over almost unchanged. The operational semantics of CHOCS is given as a labelled transition system and it is a direct extension of the semantics of CCS with value passing. A set of algebraic laws satisfied by the calculus is presented. These are similar to the CCS laws only introducing obvious extra laws for sending and receiving processes. The power of process passing is underlined by a result showing that the recursion operator is unnecessary in the sense that recursion can be simulated by means of process passing and communication. The CHOCS language is also studied by means of a denotational semantics. A major result is the full abstractness of this semantics with respect to the operational semantics. The denotational semantics is used to provide an easy proof of the simulation of recursion.
Introducing processes as first class objects yields a powerful metalanguage. It is shown that it is possible to simulate various reduction strategies of the untyped λ-Calculus in CHOCS. As pointed out by Milner, CCS has its limitations when one wants to describe unboundedly expanding systems, e.g. an unbounded number of procedure invocations in an imperative concurrent programming language P with recursive procedures. CHOCS may neatly describe both call-by-value and call-by-reference parameter mechanisms for P. We also consider call-by-name and lazy parameter mechanisms for P.
The second calculus is called Plain CHOCS. Essential to the new calculus is the treatment of restriction as a static binding operator on port names. This calculus is given an operational semantics using labelled transition systems which combines ideas from the applicative transition systems described by Abramsky and the transition systems used for CHOCS. This calculus enjoys algebraic properties which are similar to those of CHOCS only needing obvious extra laws for the static nature of the restriction operator. Processes as first class objects enable description of networks with changing interconnection structure and there is a close connection between the Plain CHOCS calculus and the π-Calculus described by Milner, Parrow and Walker: the two calculi can simulate one another.
Recently object oriented programming has grown into a major discipline in computational practice as well as in computer science. From a theoretical point of view object oriented programming presents a challenge to any metalanguage since most object oriented languages have no formal semantics. We show how Plain CHOCS may be used to give a semantics to a prototype object oriented language called 0.Open Acess