This text makes in-depth explorations of a broad range of theoretical topics in computer science. It plunges into the applications of the abstract concepts in order to confront and address the skepticism of readers, and instill in them an appreciation for the usefulness of theory. A two-part presentation integrates logic and formal language—both with applications. Chapter topics cover mathematical preliminaries, propositional logic, proving things: why and how, predicate logic, proving with predicates, program verification, logic programming, language models for computer science, language models, finite automata and their languages, regular expressions, Lex: a tool for building lexical scanners, context-free grammars, pushdown automata and parsing, and turing machines. For future computer scientists.
This book invites the reader to explore abstractions that are crucial to computer science. The authors bring a sense of excitement to logics, formal languages and automata—motivating topics by linking them to computing and to computational applications, sometime with whole chapters. They achieve exceptional clarity through a plethora of examples and figures, yet without-losing sight of, and indeed celebrating, the precision that is the hallmark of this subject matter.
Features of the book include: - application of logic to program verification
- programming in the logic language, Prolog
- discussion of "why" and "how" to prove things
- relationships between English and programming languages
- diagrams-first approach to automata
- lex as a tool and an extension of formal language
- pushdown automata as parsing strategies
- Turing machines as models of computation