This text introduces the beginning computer science student to some of the fundamental ideas and techniques used by computer scientists today, focusing on discrete structures, logic and computability. The emphasis is on the computational aspects, so that the reader can see how the concepts are actually used. Because of logic's fundamental importance to computer science, the topic is examined extensively in three phases which cover: informal logic; the technique of inductive proof; and formal logic and its applications to computer science.
Author(s): James L. Hein
Publisher: Jones and Bartlett
Year: 1995
Language: English
Pages: 949
City: Boston
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