Logic for Computer Science

This book discusses logic as a tool for computer science; a field that uses logic at all levels. It provides a survey of mathematical logic and its various applications. Some areas where it is particularly important include:
 * Digital circuit design
 * Complexity theory (NP equivalent to Existential second-order logic)
 * Database Systems (SQL; roughly predicate/first-order logic)
 * Computer-aided verification (Temporal logic & model checking)
 * Programming languages (lambda calculus)
 * AI, expert systems, inference engines
 * Distributed Systems
 * Logic Programming
 * Computer Security

After covering basic material of propositional logic and first-order logic, the course presents the foundations of finite model theory and descriptive complexity. Other topics, including logic programming, non-monotonic reasoning, temporal logic, and reasoning about knowledge and belief, are surveyed as time allows. These notes were taken by student scribes.