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.
This volume introduces the fundamental results and the state of the art in infinite duration games on graphs. These versatile game models first appeared in the study of automata and logic, but later became important for program verification and synthesis. They have many more applications. In particular, this book covers models from the fields of optimisation, reinforcement learning, model theory, and set theory. The material is presented at a level accessible to beginning graduate students, requiring only a basic understanding of discrete algorithms and graphs. The book's primary objective is constructing efficient algorithms for analysing different types of games. Rather than describe their implementation in full detail, it investigates their theoretical foundations and proves their properties and winning strategies. This tutorial reference from experts across the field is ideal for students, researchers, and professionals in logic and automata, verification and synthesis, and related fields.
Learn to program more effectively, faster, with better results… and enjoy both the learning experience and the benefits it ultimately brings. While this undergraduate-level textbook is motivated by formal methods, so encouraging habits that lead to correct and concise computer programs, its informal presentation sidesteps any rigid reliance on formal logic which programmers are sometimes led to believe is required. Instead, a straightforward and intuitive use of simple 'What's true here?' comments encourages precision of thought without prescription of notation. Drawing on decades of the author's experience in teaching/industry, the text's careful presentation concentrates on key principles of structuring and reasoning about programs, applying them first to small, understandable algorithms. Then students can concentrate on turning those reliably into their corresponding – and correct – program source codes. The text includes over 200 exercises, for many of which full solutions are provided. A set of all solutions is available for instructors' use.
Computable structure theory quantifies and studies the relative complexity of mathematical structures. This text, in conjunction with the author's previous volume, represents the first full monograph on computable structure theory in two decades. It brings new results of the author together with many older results that were previously scattered across the literature and presents them all in a coherent framework. Geared towards graduate students and researchers in mathematical logic, the book enables the reader to learn all the main results and techniques in the area for application in their own research. While the previous volume focused on countable structures whose complexity can be measured within arithmetic, this second volume delves into structures beyond arithmetic, moving into the realm of the hyperarithmetic and the infinitary languages.
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.
This chapter explores collection analysis as a tool for proving some simple invariants about Horn clause logic programs. This static analysis of Horn clauses employs higher-order quantification and linear logic. This chapter introduces different types of collection approximations, such as multiset, set, and list approximations. The chapter also briefly mentions the automation of this analysis. Bibliographic notes provide pointers to relevant research in program analysis.
This chapter introduces linear logic, highlighting its unique approach to resource management. It presents sequent calculus proof systems for linear logic. The chapter discusses the polarity of logical connectives in linear logic and the concept of multi-zone sequents. It provides an informal semantics of resource consumption to illustrate the meaning of linear logic connectives. The chapter also touches upon the implementation of proof search in linear logic, mentioning techniques like lazy splitting of multisets. Bibliographic notes guide the reader to key literature on linear logic and its proof theory.