We use cookies to distinguish you from other users and to provide you with a better experience on our websites. Close this message to accept cookies or find out how to manage your cookie settings.
To save content items to your account,
please confirm that you agree to abide by our usage policies.
If this is the first time you use this feature, you will be asked to authorise Cambridge Core to connect with your account.
Find out more about saving content to .
To save content items to your Kindle, first ensure [email protected]
is added to your Approved Personal Document E-mail List under your Personal Document Settings
on the Manage Your Content and Devices page of your Amazon account. Then enter the ‘name’ part
of your Kindle email address below.
Find out more about saving to your Kindle.
Note you can select to save to either the @free.kindle.com or @kindle.com variations.
‘@free.kindle.com’ emails are free but can only be saved to your device when it is connected to wi-fi.
‘@kindle.com’ emails can be delivered even when you are not connected to wi-fi, but note that service fees apply.
Constraint Handling Rules (CHR) is both a theoretical formalism based on logic and a practical programming language based on rules. This book, written by the creator of CHR, describes the theory of CHR and how to use it in practice. It is supported by a website containing teaching materials, online demos, and free downloads of the language. After a basic tutorial, the author describes in detail the CHR language and discusses guaranteed properties of CHR programs. The author then compares CHR with other formalisms and languages and illustrates how it can capture their essential features. Finally, larger programs are introduced and analyzed in detail. The book is ideal for graduate students and lecturers, and for more experienced programmers and researchers, who can use it for self-study. Exercises with selected solutions, and bibliographic remarks are included at the ends of chapters. The book is the definitive reference on the subject.
How can we make sure that the software we build does what it is supposed to? This book provides an insight into established techniques which help developers to overcome the complexity of software development by constructing models of software systems in early design stages. It uses one of the leading formal methods, VDM (Vienna Development Method), and combines training in the formalism with industry-strength tool support and examples derived from real industrial applications. The principles taught here also apply to many of the current generation of formal methods. This second edition has been updated to include advanced online tool support for formal modelling as well as up-to-date reports on real commercial applications in areas as diverse as business information systems and firmware design.
The Annual European Meeting of the Association for Symbolic Logic, also known as the Logic Colloquium, is among the most prestigious annual meetings in the field. The current volume, with contributions from plenary speakers and selected special session speakers, contains both expository and research papers by some of the best logicians in the world. The most topical areas of current research are covered: valued fields, Hrushovski constructions (from model theory), algorithmic randomness, relative computability (from computability theory), strong forcing axioms and cardinal arithmetic, large cardinals and determinacy (from set theory), as well as foundational topics such as algebraic set theory, reverse mathematics, and unprovability. This volume will be invaluable for experts as well as those interested in an overview of central contemporary themes in mathematical logic.
Structured methodologies are a popular and powerful tool in information systems development. Many different ones exist, each employing a number of models and so a specification must be converted from one form to another during the development process. To solve this problem, Dr Tse proposes in this 1991 book a unifying framework behind popular structured models. He approaches the problem from the viewpoints of algebra and category theory. He not only develops the frameworks but also illustrates their practical and theoretical usefulness. Thus this book will provide insight for software engineers into how methodologies can be formalised and will open up a range of applications and problems for theoretical computer scientists.
First published in 1998, this textbook is a broad but rigourous survey of the theoretical basis for the design, definition and implementation of programming languages and of systems for specifying and proving programme behaviour. Both imperative and functional programming are covered, as well as the ways of integrating these aspects into more general languages. Recognising a unity of technique beneath the diversity of research in programming languages, the author presents an integrated treatment of the basic principles of the subject. He identifies the relatively small number of concepts, such as compositional semantics, binding structure, domains, transition systems and inference rules, that serve as the foundation of the field. Assuming only knowledge of elementary programming and mathematics, this text is perfect for advanced undergraduate and beginning graduate courses in programming language theory and also will appeal to researchers and professionals in designing or implementing computer languages.
The B Method is a means for specifying, designing and coding software systems. The long-awaited B-Book is the standard reference for everything concerning this method. It contains the mathematical basis on which it is founded, the precise definitions of the notations used, and a large number of examples illustrating its use in practice. J.-R. Abrial, the inventor of B, has written the book in such a way that it can be used for self-study or for reference. It is in four parts, the first dealing with the mathematical foundations and the definition of the various mathematical structures that are needed to formalise software systems; special emphasis is placed on the notion of proof. The second part contains a presentation of the Generalised Substitution Language and of the Abstract Machine Notation; examples are given to show how large specifications can be constructed systematically. The next part introduces the two basic programming features of sequencing and loop. The last part covers the very important notion of refinement. It shows how to construct large software systems by means of layered architectures of modules. With the appearance of The B-Book, formal methods practitioners, computer scientists, and systems developers at last will have access to the definitive account of what will become one of the standard approaches to the construction of software systems.
This 1993 book shows how formal logic can be used to specify the behaviour of hardware designs and reason about their correctness. A primary theme of the book is the use of abstraction in hardware specification and verification. The author describes how certain fundamental abstraction mechanisms for hardware verification can be formalised in logic and used to express assertions about design correctness and the relative accuracy of models of hardware behaviour. His approach is pragmatic and driven by examples. He also includes an introduction to higher-order logic, which is a widely used formalism in this subject, and describes how that formalism is actually used for hardware verification. The book is based in part on the author's own research as well as on graduate teaching. Thus it can be used to accompany courses on hardware verification and as a resource for research workers.
Action Semantics is a novel approach to the formal description of programming languages. Its abstractness is at an intermediate level, between that of denotational and operational semantics. Action Semantics has considerable pragmatic advantages over all previous approaches, in its comprehensibility and accessibility, and especially in the usefulness of its semantic descriptions of realistic programming languages. In this volume, Dr Peter Mosses gives a thorough introduction to action semantics, and provides substantial illustrations of its use. Graduates of computer science or maths who have an interest in the semantics of programming languages will find Action Semantics a most helpful book.
'Design by programming' has proved very successful in the development of complex software systems. This book describes the construction of programs for VLSI digital circuit design, using the language Tangram, and shows how they can be compiled automatically in fully asynchronous circuits. Handshake circuits were invented by the author to separate questions involving the efficient implementation of the VLSI circuits from issues arising in their design. Dr van Berkel presents a mathematical theory of handshake circuits and a silicon compiler supported by a correctness proof. The treatment of VLSI realizations of handshake circuits includes various forms of optimization, handshake refinement, message encoding, circuit initialization, and testing. The approach is illustrated with a host of examples drawn from a wide range of application areas. The book will be of use to electrical engineers and computer scientists involved in VLSI design.
Reviewers and readers have enthused over previous 'Illustrating' books from the pen of Donald Alcock; his unique formula using graphics and calligraphy to explain what else would take a thousand words is here applied to illustrate ANSI C. As usual, Alcock emphasizes learning by writing programs and working through them. Plenty of real programs are used to good effect, so that by the end of the book advanced topics have been described by means of increasingly sophisticated examples. A feature of the layout is the double-page spread: each of these covers a particular topic making the book useful as a reference manual. Moreover each spread is made as self-contained as is reasonably possible - ideal for browsing. For the programmer with a grounding in one language, such as FORTRAN, this book will give an excellent introduction to standard C - one that emphasizes the self-discipline needed to write portable programs. This revised edition has benefited from many corrections and updates, and has now been printed in a wide-page format for ease of use.
The overwhelming majority of bugs and crashes in computer programming stem from problems of memory access, allocation, or deallocation. Such memory related errors are also notoriously difficult to debug. Yet the role that memory plays in C and C++ programming is a subject often overlooked in courses and in books because it requires specialised knowledge of operating systems, compilers, computer architecture in addition to a familiarity with the languages themselves. Most professional programmers learn entirely through experience of the trouble it causes. This 2004 book provides students and professional programmers with a concise yet comprehensive view of the role memory plays in all aspects of programming and program behaviour. Assuming only a basic familiarity with C or C++, the author describes the techniques, methods, and tools available to deal with the problems related to memory and its effective use.
Logic programming was based on first-order logic. Higher-order logics can also lead to theories of theorem-proving. This book introduces just such a theory, based on a lambda-calculus formulation of a clausal logic with equality, known as the Clausal Theory of Types. By restricting this logic to Horn clauses, a concise form of logic programming that incorporates functional programming is achieved. The book begins by reviewing the fundamental Skolem-Herbrand-Gödel Theorem and resolution, which are then extrapolated to a higher-order setting; this requires introducing higher-order equational unification which builds in higher-order equational theories and uses higher-order rewriting. The logic programming language derived has the unique property of being sound and complete with respect to Henkin-Andrews general models, and consequently of treating equivalent terms as identical. First published in 1993, the book can be used for graduate courses in theorem-proving, but will be of interest to all working in declarative programming.
This book is an in-depth exploration of ENVY/Developer, IBM's team programming environment for Smalltalk and Java. Written by well-known experts in the area, it presents both introductory and advanced topics with detailed examples. The first two parts of the book introduce the basics that a developer or development manager must know in order to use ENVY in a project setting, including the development process and the organization of applications. The third part covers advanced programming and customization, including detailed information on administering, troubleshooting, and extending the tools. This book covers VisualAge for Smalltalk, VisualWorks, and VisualAge Generator in detail. In addition, the concepts and management presented within the book apply to VisualAge for Java. Code examples, tools, and add-ons, are available on the supporting Web site.
The designer of a software system, like the architect of a building, needs to be aware of the construction techniques available and to choose the ones that are the most appropriate. This book provides the implementer of software systems with a guide to 25 different techniques for the complete development processes, from system definition through design and into production. The techniques are described against a common background of the traditional development path, its activities and deliverable items. In addition the concepts of metrics and indicators are introduced as tools for both technical and managerial monitoring and control of progress and quality. The book is intended to widen the mental toolkit of system developers and their managers, and will also introduce students of computer science to the practical side of software development. With its wide-ranging treatment of the techniques available and the practical guidance it offers, it will prove an important and valuable work.
This is an introduction to process algebra, also known as the Algebra of Communicating Processes (ACP). It is a self-contained mathematical approach to the theory which can be used for graduate courses, though it also has material of interest to researchers. It is a unique introduction to this model of concurrent programming and will be essential reading for all computer scientists interested in parallel processing and algebraic methods in computer science.
This book, written entirely by hand, is an introduction to programming in Pascal. It starts with the fundamental concept of a stored program and works through to the manipulation of records in dynamic storage. The style of presentation is pictorial. This book may be used as a self-contained reference manual for Pascal to BS 6192 and ISO 7185. Besides defining the statements and structures of Pascal this book illustrates the use of such features in small but complete programs. These programs introduce fundamental techniques of programming such as symbol-state tables, bubble sort, quicksoft, stacks and queues, reverse Polish notation, linked lists, shortest-route technique, doubly linked rings, binary trees, hashing technique and other tools of the programmer's trade.
A central problem in the design of programming systems is to provide methods for verifying that computer code performs to specification. This book presents a rigorous foundation for defining Boolean categories, in which the relationship between specification and behaviour can be explored. Boolean categories provide a rich interface between program constructs and techniques familiar from algebra, for instance matrix- or ideal-theoretic methods. The book's distinction is that the approach relies on only a single program construct (the first-order theory of categories), the others being derived mathematically from four axioms. Development of these axioms (which are obeyed by an abundance of program paradigms) yields Boolean algebras of 'predicates', loop-free constructs, and a calculus of partial and total correctness which is shown to be the standard one of Hoare, Dijkstra, Pratt, and Kozen. The book is based in part on courses taught by the author, and will appeal to graduate students and researchers in theoretical computer science.
The author presents a theory of concurrent processes where three different semantic description methods that are usually studied in isolation are brought together. Petri nets describe processes as concurrent and interacting machines; algebraic process terms describe processes as abstract concurrent processes; and logical formulas specify the intended communication behaviour of processes. At the heart of this theory are two sets of transformation rules for the top-down design of concurrent processes. The first set can be used to transform stepwise logical formulas into process terms, whilst process terms can be transformed into Petri nets by the second set. These rules are based on novel techniques for the operational and denotational semantics of concurrent processes. Various results and relationships between nets, terms and formulas starting with formulas and illustrated by examples. The use of transformations is demonstrated in a series of case studies, and the author also identifies directions for research.
The proceedings of the Los Angeles Caltech-UCLA 'Cabal Seminar' were originally published in the 1970s and 1980s. Games, Scales, and Suslin Cardinals is the first of a series of four books collecting the seminal papers from the original volumes together with extensive unpublished material, new papers on related topics, and discussion of research developments since the publication of the original volumes. Focusing on the subjects of 'Games and Scales' (Part 1) and 'Suslin Cardinals, Partition Properties, and Homogeneity' (Part 2), each of the two sections is preceded by an introductory survey putting the papers into present context. This volume will be an invaluable reference for anyone interested in higher set theory.
The Annual European Meeting of the Association for Symbolic Logic, generally known as the Logic Colloquium, is the most prestigious annual meeting in the field. Many of the papers presented there are invited surveys of developments, and the rest of the papers are chosen to complement the invited talks. This 2007 volume includes surveys, tutorials, and selected research papers from the 2005 meeting. Highlights include three papers on different aspects of connections between model theory and algebra; a survey of major advances in combinatorial set theory; a tutorial on proof theory and modal logic; and a description of Bernay's philosophy of mathematics.