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.
The final quarter of the 20th century has seen the establishment of a global computational infrastructure. This and the advent of programming languages such as Java, supporting mobile distributed computing, has posed a significant challenge to computer sciences. The infrastructure can support commerce, medicine and government, but only if communications and computing can be secured against catastrophic failure and malicious interference.
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