This textbook presents all the fundamental topics of discrete mathematics that are introduced from the perspectives of a pure mathematician and an applied computer scientist. The integration of the two perspectives is seen throughout the book; key concepts are motivated and explained through real-world examples, and yet are still formalized with mathematical rigor. Thus, it is an excellent introduction to computer science and software engineering. The first author is a leading mathematician in the area of logic, computability, and theoretical computer science, with more than 25 years of teaching and research experience. The second author is a computer science PhD student at the University of Washington specializing in database systems. The father-and-daughter team bring together two different perspectives to create a unified book for students interested in learning discrete mathematics, connections between discrete mathematics and computer science, and the mathematical foundations of computer science. Readers will learn how to formally define abstract concepts, reason about objects (e.g., programs, graphs and numbers), investigate properties of algorithms, and prove their correctness.
The textbook concentrates on the study of several well-known algorithmic problems (e.g., the path problem for graphs and finding the greatest common divisor), inductive definitions, proofs of correctness of algorithms via loop invariants and induction, the basics of formal methods (e.g., propositional logic), finite state machines, counting, probability, and the foundations of databases (e.g., relational calculus).