**New Full Version With Online Assessment Now Available!**

Undergraduate computer science students need to learn and use the mathematical method of abstraction, definition, and proof, perhaps even earlier than do mathematics students. They deal constantly with formally defined systems beyond those studied in mathematics courses, and must be able reason about them formally in order to write and understand programs.

**A Mathematical Foundation for Computer Science** introduces the mathematical method using examples from computer science, often illustrated by Java-like code. It begins with propositional and predicate logic, introduces number theory, and deals thoroughly with mathematical induction as it relates to recursive definition and recursive algorithms. Later chapters cover combinatorics, probability, graphs and searching, finite-state machines, and a brief introduction to formal language theory.

Each chapter is divided into narrative sections, each with Exercises and Problems, and Excursion sections suitable for active learning exercises.

This revised preliminary edition contains the eight chapters that are used as the textbook for a UMass course, COMPSCI 250.

Chapter 1: Sets, Propositions and Predicates

Chapter 2: Quantifiers and Predicate Calculus

Chapter 3: Number Theory

Chapter 4: Recursion and Proof By Induction

Chapter 5: Regular Expressions and Other Recursive Systems

Chapter 6: Fundamental Counting Problems

Chapter 7: Further Topics in Combinatorics

Chapter 8: Graphs

Chapter 9: Trees and Searching

Chapter 10: Discrete Probability

Chapter 11: Reasoning About Uncertainty

Chapter 12: Markov Processes and Classical Games

Chapter 13: Information Theory

Chapter 14: Finite-State Machines

Chapter 15: A Brief Tour of Formal Language Theory

**DAVID BARRINGTON**

David Mix Barrington is Professor of Information and Computer Sciences at the University of Massachusetts Amherst. He joined UMass in 1986 after completing his Ph.D. at M.I.T. under the direction of Michael Sipser. His research has focused on the complexity of computation, particularly the relationship of circuit complexity to finite automata and formal logic. His hobbies include acting, bicycling, and choral singing.