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 no-reply@cambridge.org
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.
What defines a correct program? What education makes a good programmer? The answers to these questions depend on whether programs are seen as mathematical entities, engineered socio-technical systems or media for assisting human thought. Programmers have developed a wide range of concepts and methodologies to construct programs of increasing complexity. This book shows how those concepts and methodologies emerged and developed from the 1940s to the present. It follows several strands in the history of programming and interprets key historical moments as interactions between five different cultures of programming. Rooted in disciplines such as mathematics, electrical engineering, business management or psychology, the different cultures of programming have exchanged ideas and given rise to novel programming concepts and methodologies. They have also clashed about the nature of programming; those clashes remain at the core of many questions about programming today. This title is also available as Open Access on Cambridge Core.
Everywhere one looks, one finds dynamic interacting systems: entities expressing and receiving signals between each other and acting and evolving accordingly over time. In this book, the authors give a new syntax for modeling such systems, describing a mathematical theory of interfaces and the way they connect. The discussion is guided by a rich mathematical structure called the category of polynomial functors. The authors synthesize current knowledge to provide a grounded introduction to the material, starting with set theory and building up to specific cases of category-theoretic concepts such as limits, adjunctions, monoidal products, closures, comonoids, comodules, and bicomodules. The text interleaves rigorous mathematical theory with concrete applications, providing detailed examples illustrated with graphical notation as well as exercises with solutions. Graduate students and scholars from a diverse array of backgrounds will appreciate this common language by which to study interactive systems categorically.
This up-to-date introduction to type theory and homotopy type theory will be essential reading for advanced undergraduate and graduate students interested in the foundations and formalization of mathematics. The book begins with a thorough and self-contained introduction to dependent type theory. No prior knowledge of type theory is required. The second part gradually introduces the key concepts of homotopy type theory: equivalences, the fundamental theorem of identity types, truncation levels, and the univalence axiom. This prepares the reader to study a variety of subjects from a univalent point of view, including sets, groups, combinatorics, and well-founded trees. The final part introduces the idea of higher inductive type by discussing the circle and its universal cover. Each part is structured into bite-size chapters, each the length of a lecture, and over 200 exercises provide ample practice material.
Petri nets are one of the most popular tools for modeling distributed systems. This book provides a modern look at the theory behind them, by studying three classes of nets that model (i) sequential systems, (ii) non-communicating parallel systems, and (iii) communicating parallel systems. A decidable and causality respecting behavioral equivalence is presented for each class, followed by a modal logic characterization for each equivalence. The author then introduces a suitable process algebra for the corresponding class of nets and proves that the behavioral equivalence proposed for each class is a congruence for the operator of the corresponding process algebra. Finally, an axiomatization of the behavioral congruence is proposed. The theory is introduced step by step, with ordinary-language explanations and examples provided throughout, to remain accessible to readers without specialized training in concurrency theory or formal logic. Exercises with solutions solidify understanding, and the final chapter hints at extensions of the theory.
Providing in-depth coverage, this book covers the fundamentals of computation and programming in C language. Essential concepts including operators and expressions, input and output statements, loop statements, arrays, pointers, functions, strings and preprocessors are described in a lucid manner. A unique approach - 'Learn by quiz' - features questions based on confidence-based learning methodology. It helps the reader to identify the right answer with adequate explanation and reasoning as to why the other options are incorrect. Computer programs and review questions are interspersed throughout the text. The book is appropriate for undergraduate students of engineering, computer science and information technology. It can be used for self-study and assists in the understanding of theoretical concepts and their applications.
Session types are type-theoretic specifications of communication protocols in concurrent or distributed systems. By codifying the structure of communication, they make software more reliable and easier to construct. Over recent decades, the topic has become a large and active research area within the field of programming language theory and implementation. Written by leading researchers in the field, this is the first text to provide a comprehensive introduction to the key concepts of session types. The thorough theoretical treatment is complemented by examples and exercises, suitable for use in a lecture course or for self-study. It serves as an entry point to the topic for graduate students and researchers.
Mobile systems, whose components communicate and change their structure, now pervade the informational world and the wider world of which it is a part. The science of mobile systems is as yet immature, however. This book presents the pi-calculus, a theory of mobile systems. The pi-calculus provides a conceptual framework for understanding mobility, and mathematical tools for expressing systems and reasoning about their behaviours. The book serves both as a reference for the theory and as an extended demonstration of how to use pi-calculus to describe systems and analyse their properties. It covers the basic theory of pi-calculus, typed pi-calculi, higher-order processes, the relationship between pi-calculus and lambda-calculus, and applications of pi-calculus to object-oriented design and programming. The book is written at the graduate level, assuming no prior acquaintance with the subject, and is intended for computer scientists interested in mobile systems.
In a technologically advanced and competitive landscape dominated by major tech companies and burgeoning start-ups, the key asset lies in boosting monthly active users. Traditionally, product design has relied on fragmented insights from personal experience, common sense, or isolated experiments. This work endeavours to establish a theoretical framework for predicting and influencing the digital behaviour of technology users. Drawing on over a century of scientific research in behaviour, cognition, and physiology, this presents a comprehensive approach to customizing digital stimuli. The objective is to enhance user interactions with digital and virtual environments. Through real and cost-effective examples, diagrams, and formulas, the text offers theoretical knowledge and a practical methodology to elevate digital product designs, setting them apart from the competition. With the potential to reshape the digital design landscape, this book emerges as a game-changer, promising to revolutionize how digital products and services are conceived and delivered.
This is the first book to revisit the theory of rewriting in the context of strict higher categories, through the unified approach provided by polygraphs, and put it in the context of homotopical algebra. The first half explores the theory of polygraphs in low dimensions and its applications to the computation of the coherence of algebraic structures. Illustrated with algorithmic computations on algebraic structures, the only prerequisite in this section is basic category theory. The theory is introduced step-by-step, with detailed proofs. The second half introduces and studies the general notion of n-polygraph, before addressing the homotopy theory of these polygraphs. It constructs the folk model structure on the category on strict higher categories and exhibits polygraphs as cofibrant objects. This allows the formulation of higher-dimensional generalizations of the coherence results developed in the first half. Graduate students and researchers in mathematics and computer science will find this work invaluable.
Providing an in-depth treatment of an exciting research area, this text's central topics are initial algebras and terminal coalgebras, primary objects of study in all areas of theoretical computer science connected to semantics. It contains a thorough presentation of iterative constructions, giving both classical and new results on terminal coalgebras obtained by limits of canonical chains, and initial algebras obtained by colimits. These constructions are also developed in enriched settings, especially those enriched over complete partial orders and complete metric spaces, connecting the book to topics like domain theory. Also included are an extensive treatment of set functors, and the first book-length presentation of the rational fixed point of a functor, and of lifting results which connect fixed points of set functors with fixed points of endofunctors on other categories. Representing more than fifteen years of work, this will be the leading text on the subject for years to come.
The latest version of 'Programming in Ada' covers the full details of the core language Ada 2022 as approved by ISO in 2023, including new features that aid program proof and the efficient use of multicore architectures. The book is arranged in four parts. The first part introduces the key ideas to the newcomer with a working example illustrating the basic ideas. The algorithmic features, structural features such as OOP and multitasking, and details of the standard library and interaction with the external environment are all covered in subsequent parts. This comprehensive guide includes several working examples and is enhanced by a range of supplementary online materials, including a dozen complete executable programs, five of which illustrate important new features. 'Programming in Ada' is a must-have for anyone looking to learn Ada programming language, and will serve as a definitive reference for years to come.
Developing the theory up to the current state-of-the art, this book studies the minimal model of the Largest Suslin Axiom (LSA), which is one of the most important determinacy axioms and features prominently in Hugh Woodin's foundational framework known as the Ultimate L. The authors establish the consistency of LSA relative to large cardinals and develop methods for building models of LSA from other foundational frameworks such as Forcing Axioms. The book significantly advances the Core Model Induction method, which is the most successful method for building canonical inner models from various hypotheses. Also featured is a proof of the Mouse Set Conjecture in the minimal model of the LSA. It will be indispensable for graduate students as well as researchers in mathematics and philosophy of mathematics who are interested in set theory and in particular, in descriptive inner model theory.
Introducing Stone–Priestley duality theory and its applications to logic and theoretical computer science, this book equips graduate students and researchers with the theoretical background necessary for reading and understanding current research in the area. After giving a thorough introduction to the algebraic, topological, logical, and categorical aspects of the theory, the book covers two advanced applications in computer science, namely in domain theory and automata theory. These topics are at the forefront of active research seeking to unify semantic methods with more algorithmic topics in finite model theory. Frequent exercises punctuate the text, with hints and references provided.
The Java programming language has been one of the most powerful tools available to computer programmers since its inception in 1995. It has also consistently changed since then, making it a vast and powerful resource for object-oriented programming today. This lucid textbook introduces the student not only to the nuances of object-oriented programming, but also to the many syntaxes and semantics of the modern Java language. Each concept of programming is explained, and then illustrated with small but effective ready-to-run programs. Important points to be noted have been emphasized and hints have been given at the end of each discussion so that programmers are careful to avoid common pitfalls. Finally, a number of practice problems taken from real world scenarios encourage the student to think in terms of problem solving, consolidating the knowledge gained.
How should we treat the liar and kindred paradoxes? A Theory of Truth argues that we should diverge from classical logic, and presents a new formal theory of truth. The theory does not incorporate contradictions and is not substructural, but deviates from classical logic significantly, and endorses principles like 'No sentence is both true and false' and 'No sentence is neither true nor false'. The book starts with an introduction to the paradoxes, suitable for newcomers to the subject, before presenting its approach. Four versions of the theory are covered, extending the theory to a determinacy operator and to a full first-order language with quantifiers. Each includes all Tarskian biconditionals that can be formulated in its language. The author uses original methods to prove the consistency of each version and compares the theory to alternative non-classical theories, including Field's paracomplete approach, Ripley's nontransitive system and Zardini's contraction-free calculus.
String diagrams are powerful graphical methods for reasoning in elementary category theory. Written in an informal expository style, this book provides a self-contained introduction to these diagrammatic techniques, ideal for graduate students and researchers. Much of the book is devoted to worked examples highlighting how best to use string diagrams to solve realistic problems in elementary category theory. A range of topics are explored from the perspective of string diagrams, including adjunctions, monad and comonads, Kleisli and Eilenberg–Moore categories, and endofunctor algebras and coalgebras. Careful attention is paid throughout to exploit the freedom of the graphical notation to draw diagrams that aid understanding and subsequent calculations. Each chapter contains plentiful exercises of varying levels of difficulty, suitable for self-study or for use by instructors.
In concurrent and distributed systems, processes can complete tasks together by playing their parts in a joint plan. The plan, or protocol, can be written as a choreography: a formal description of overall behaviour that processes should collaborate to implement, like authenticating a user or purchasing an item online. Formality brings clarity, but not only that. Choreographies can contribute to important safety and liveness properties. This book is an ideal introduction to theory of choreographies for students, researchers, and professionals in computer science and applied mathematics. It covers languages for writing choreographies and their semantics, and principles for implementing choreographies correctly. The text treats the study of choreographies as a discipline in its own right, following a systematic approach that starts from simple foundations and proceeds to more advanced features in incremental steps. Each chapter includes examples and exercises aimed at helping with understanding the theory and its relation to practice.
Constructive mathematics – mathematics in which 'there exists' always means 'we can construct' – is enjoying a renaissance. fifty years on from Bishop's groundbreaking account of constructive analysis, constructive mathematics has spread out to touch almost all areas of mathematics and to have profound influence in theoretical computer science. This handbook gives the most complete overview of modern constructive mathematics, with contributions from leading specialists surveying the subject's myriad aspects. Major themes include: constructive algebra and geometry, constructive analysis, constructive topology, constructive logic and foundations of mathematics, and computational aspects of constructive mathematics. A series of introductory chapters provides graduate students and other newcomers to the subject with foundations for the surveys that follow. Edited by four of the most eminent experts in the field, this is an indispensable reference for constructive mathematicians and a fascinating vista of modern constructivism for the increasing number of researchers interested in constructive approaches.
Formal languages and automata have long been fundamental to theoretical computer science, but students often struggle to understand these concepts in the abstract. This book provides a rich source of compelling exercises designed to help students grasp the subject intuitively through practice. The text covers important topics such as finite automata, regular expressions, push-down automata, grammars, and Turing machines via a series of problems of increasing difficultly. Problems are organised by topic, many with multiple follow-ups, and each section begins with a short recap of the basic notions necessary to make progress. Complete solutions are given for all exercises, making the book well suited for self-study as well as for use as a course supplement. Developed over the course of the editors' two decades of experience teaching the acclaimed Automata, Formal Languages, and Computation course at the University of Warsaw, it is an ideal resource for students and instructors alike.