This textbook presents fundamental topics in discrete mathematics introduced from the perspectives of a pure mathematician and an applied computer scientist. The synergy between the two complementary perspectives is seen throughout the book; key concepts are motivated and explained through real-world examples, and yet are still formalized with mathematical rigor. The book is an excellent introduction to discrete mathematics for computer science, software engineering, and mathematics students.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 merges two different views to create a unified book for students interested in learning discrete mathematics, the 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 (such as programs, graphs and numbers), investigate properties of algorithms, and prove their correctness. The textbook studies several well-known algorithmic problems including 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 such as propositional logic, finite state machines, counting, probability, as well as the foundations of databases such as relational calculus.