Table of contents : Cover Title Page Copyright Page Table of Contents Preface 1 Elementary Notions and Notations 1.1 A Proof Primer Logical Statements Something to Talk About Proof Techniques Exercises 1.2 Sets Operations on Sets Counting Finite Sets Bags (Multisets) Sets Should Not Be Too Complicated Exercises 1.3 Other Structures Tuples Products of Sets Lists Strings Relations Graphs Trees Counting Tuples Exercises Chapter Summary 2 Facts about Functions 2.1 Definitions and Examples Terminology Some Useful Functions Partial Functions Exercises 2.2 Constructing Functions Composition and Tupling Higher-Order Functions Exercises 2.3 Properties of Functions Injective and Surjective The Pigeonhole Principle Hash Functions Exercises 2.4 Counting Infinite Sets Countable and Uncountable Exercises Chapter Summary 3 Construction Techniques 3.1 Inductively Defined Sets Natural Numbers Strings Binary Trees Product Sets Exercises 3.2 Language Constructions Combining Languages Grammars and Derivations Grammars and Languages Meaning and Ambiguity Exercises 3.3 Recursively Defined Functions and Procedures Natural Numbers Lists Strings Binary Trees The Redundant Element Problem The Power Set Problem Computing Streams Exercises Chapter Summary Note 4 Equivalence, Order, and Inductive Proof 4.1 Properties and Tools Composition Closures Path Problems Exercises 4.2 Equivalence Relations Equivalence and Partitioning Generating Equivalence Relations An Equivalence Problem Exercises 4.3 Order Relations Partial Orders Weil-Founded Orders Ordinal Numbers Exercises 4.4 Inductive Proof The Idea of Induction Weil-Founded Induction Practical Techniques Proofs About Inductively Defined Sets Exercises Chapter Summary 5 Analysis Techniques 5.1 Optimal Algorithms Decision Trees Exercises 5.2 Elementary Counting Techniques Permutations (Order Is Important) Combinations (Order Is Not Important) Finite Probability Exercises 5.3 Solving Recurrences Finding Closed Forms for Sums Generating Functions Exercises 5.4 Comparing Rates of Growth Big Theta Little Oh Big Oh and Big Omega Exercises Chapter Summary Notes 6 Elementary Logic 6.1 How Do We Reason? What Is a Calculus? How Can We Tell Whether Something Is a Proof? 6.2 Propositional Calculus Well-Formed Formulas and Semantics Equivalence Truth Functions and Normal Forms Complete Sets of Connectives Exercises 6.3 Formal Reasoning Systems Conditional Proof Indirect Proof Proof Notes Reasoning Systems for Propositional Calculus Logic Puzzles Exercises Chapter Summary Notes 7 Predicate Logic 7.1 First-Order Predicate Calculus Well-Formed Formulas Semantics Validity The Validity Problem Exercises 7.2 Equivalent Formulas Equivalence Normal Forms Formalizing English Sentences Summary Exercises 7.3 Formal Proofs in Predicate Calculus Universal Instantiation (UI) Existential Instantiation (El) Universal Generalization (UG) Existential Generalization (EG) Examples of Formal Proofs Summary Exercises Chapter Summary Notes 8 Applied Logic 8.1 Equality Describing Equality Extending Equals for Equals Exercises 8.2 Program Correctness Imperative Program Correctness Arrays Termination Note Exercises 8.3 Higher-Order Logics Classifying Higher-Order Logics Semantics Higher-Order Reasoning Exercises Chapter Summary 9 Computational Logic 9.1 A Family Tree Exercises 9.2 Automatic Reasoning Clauses and Clausal Forms A Primer of Resolution for Propositions Substitution and Unification Resolution: The General Case Theorem Proving with Resolution Remarks Exercises 9.3 Logic Programming Resolution and Logic Programming Logic Programming Techniques Exercises Chapter Summary 10 Algebraic Structures and Techniques 10.1 What Is an Algebra? The Description Problem High School Algebra Definition of an Algebra Working in Algebras Exercises 10.2 Boolean Algebra Simplifying Boolean Expressions Digital Circuits Summary of Properties Exercises 10.3 Abstract Data Types as Algebras Natural Numbers Lists and Strings Stacks and Queues Binary Trees and Priority Queues Exercises 10.4 Computational Algebras Relational Algebras Process Algebras Functional Algebras Exercises 10.5 Other Algebraic Ideas Congruences New Algebras from Old Algebras Morphisms Exercises Chapter Summary 11 Regular Languages and Finite Automata 11.1 Regular Languages Regular Expressions Exercises 11.2 Finite Automata Deterministic Finite Automata Nondeterministic Finite Automata Transforming Regular Expressions into Finite Automata Transforming Finite Automata into Regular Expressions Finite Automata As Output Devices Representing and Executing Finite Automata Exercises 11.3 Constructing Efficient Finite Automata Another Regular Expression to NFA Algorithm Transforming an NFA into a DFA Minimum-State DFAs Exercises 11.4 Regular Language Topics Regular Grammars Properties of Regular Languages Exercises Chapter Summary 12 Context-Free Languages and Pushdown Automata 12.1 Context-Free Languages Exercises 12.2 Pushdown Automata Equivalent Forms of Acceptance Context-Free Grammars and Pushdown Automata Representing and Executing Pushdown Automata Exercises 12.3 Parsing Techniques LL(k) Parsing LR(k) Parsing Exercises 12.4 Context-Free Language Topics Exercises Chapter Summary 13 Turing Machines and Equivalent Models 13.1 Turing Machines Turing Machines with Output Alternative Definitions A Universal Turing Machine Exercises 13.2 The Church-Turing Thesis Equivalence of Computational Models A Simple Programming Language Partial Recursive Functions Machines That Transform Strings Logic Programming Languages Some Notes Exercises Chapter Summary 14 Computational Notions 14.1 Computability Effective Enumerations The Halting Problem The Total Problem Other Problems Exercises 14.2 A Hierarchy of Languages The Languages Summary Exercises 14.3 Evaluation of Expressions Lambda Calculus Knuth-Bendix Completion Exercises Chapter Summary Answers to Selected Exercises Chapter 1 Chapter 2 Chapter 3 Chapter 4 Chapter 5 Chapter 6 Chapter 7 Chapter 8 Chapter 9 Chapter 10 Chapter 11 Chapter 12 Chapter 13 Chapter 14 Bibliography Greek Alphabet Symbol Glossary Index