Foundations of Computation is a free textbook for a one-semester course in theoretical computer science. It has been used for several years in a course at Hobart and William Smith Colleges. The course has no prerequisites other than introductory computer programming. The first half of the course covers material on logic, sets, and functions that would often be taught in a course in discrete mathematics. The second part covers material on automata, formal languages and grammar that would ordinarily be encountered in an upper level course in theoretical computer science.
"On The Foundations of Computing is a technical, historical and conceptual investigation in the three main methodological approaches to the computational sciences: mathematical, engineering and experimental. The first part of the volume explores the background behind the formal understanding of computing, originating at the end of the XIX century, and it invesitagtes the formal origins and conceptual development of the notions of computation, algorithm and program. The second part of the volume overviews the construction of physical devices to perform automated tasks and it considers associated technical and conceptual issues. We start from the design and construction of the first generation of computing machines, explore their evolution and progress in engineering (for both hardware and software), and investigate their theoretical and conceptual problems. The third part of the volume analyses the methods and principles of experimental sciences founded on computational methods. We study the use of machines to perform scientific tasks, with particular reference to computer models and simulations. Each part aims at defining a notion of computational validity according to the corresponding methodological approach"--
Mathematical Foundations of Computer Science, Volume I is the first of two volumes presenting topics from mathematics (mostly discrete mathematics) which have proven relevant and useful to computer science. This volume treats basic topics, mostly of a set-theoretical nature (sets, functions and relations, partially ordered sets, induction, enumerability, and diagonalization) and illustrates the usefulness of mathematical ideas by presenting applications to computer science. Readers will find useful applications in algorithms, databases, semantics of programming languages, formal languages, theory of computation, and program verification. The material is treated in a straightforward, systematic, and rigorous manner. The volume is organized by mathematical area, making the material easily accessible to the upper-undergraduate students in mathematics as well as in computer science and each chapter contains a large number of exercises. The volume can be used as a textbook, but it will also be useful to researchers and professionals who want a thorough presentation of the mathematical tools they need in a single source. In addition, the book can be used effectively as supplementary reading material in computer science courses, particularly those courses which involve the semantics of programming languages, formal languages and automata, and logic programming.
Written for professionals learning the field of discrete mathematics, this book provides the necessary foundations of computer science without requiring excessive mathematical prerequisites. Using a balanced approach of theory and examples, software engineers will find it a refreshing treatment of applications in programming.
Computability and complexity theory should be of central concern to practitioners as well as theorists. Unfortunately, however, the field is known for its impenetrability. Neil Jones's goal as an educator and author is to build a bridge between computability and complexity theory and other areas of computer science, especially programming. In a shift away from the Turing machine- and G�del number-oriented classical approaches, Jones uses concepts familiar from programming languages to make computability and complexity more accessible to computer scientists and more applicable to practical programming problems. According to Jones, the fields of computability and complexity theory, as well as programming languages and semantics, have a great deal to offer each other. Computability and complexity theory have a breadth, depth, and generality not often seen in programming languages. The programming language community, meanwhile, has a firm grasp of algorithm design, presentation, and implementation. In addition, programming languages sometimes provide computational models that are more realistic in certain crucial aspects than traditional models. New results in the book include a proof that constant time factors do matter for its programming-oriented model of computation. (In contrast, Turing machines have a counterintuitive "constant speedup" property: that almost any program can be made to run faster, by any amount. Its proof involves techniques irrelevant to practice.) Further results include simple characterizations in programming terms of the central complexity classes PTIME and LOGSPACE, and a new approach to complete problems for NLOGSPACE, PTIME, NPTIME, and PSPACE, uniformly based on Boolean programs. Foundations of Computing series
The book provides a self-contained introduction to mathematical logic and computability theory for students of mathematics or computer science. It is organized around the failures and successes of Hilbert's programme for the formalization of Mathematics. It is widely known that the programme failed with Gödel's incompleteness theorems and related negative results about arithmetic. Unfortunately, the positive outcomes of the programme are less well known, even among mathematicians. The book covers key successes, like Gödel's proof of the completeness of first-order logic, Gentzen's proof of its consistency by purely symbolic means, and the decidability of a couple of useful theories. The book also tries to convey the message that Hilbert's programme made a significant contribution to the advent of the computer as it is nowadays understood and, thus, to the latest industrial revolution. Part I of the book addresses Hilbert's programme and computability. Part II presents first-order logic, including Gödel's completeness theorem and Gentzen's consistency theorem. Part III is focused on arithmetic, representability of computable maps, Gödel's incompleteness theorems and decidability of Presburger arithmetic. Part IV provides detailed answers to selected exercises. The book can be used at late undergraduate level or early graduate level. An undergraduate course would concentrate on Parts I and II, leaving out the Gentzen calculus, and sketching the way to the 1st incompleteness theorem. A more advanced course might skip early material already known to the students and concentrate on the positive and negative results of Hilbert's programme, thus covering Gentzen's proof of consistency and Part III in full.